TGIF
Section: Misc. Reference Manual Pages (n)
Updated: Version 2.16 Patchlevel 11 and Above
Index
Return to Main Contents
NAME
tgif - Xlib based interactive 2-D drawing facility under X11.
Supports hierarchical construction of drawings and easy navigation between
sets of drawings. It can also be used to launch applications. It's also
a hyper-graphics (or hyper-structured-graphics) browser on the World-Wide-Web.
SYNOPSIS
tgif
[-display displayname]
[-fg <color>]
[-bg <color>]
[-bd <color>]
[-rv]
[-nv]
[-bw]
[-cwo]
[-hyper]
[-geometry <geom>]
[=<geom>]
[<file>[.obj]]
or
tgif
-print
[-eps]
[-p]
[-ps]
[-f]
[-text]
[-gray]
[-adobe | -adobe=<number>/<number>]
[-page <number>]
[-print_cmd "<command>"]
[-one_file_per_page]
[-pepsc]
[-bop_hook "<string>"]
[-eop_hook "<string>"]
[-odir]
[file1 file2 ...]
DESCRIPTION
Tgif is an interactive drawing tool that allows the user to draw and
manipulate objects in the X Window System. Tgif runs interactively in
the first form. In the second form, tgif just prints files without
opening windows or fonts, and it is compatible with
the obsoleted prtgif.
In the first form, the command line arguments
-fg, -bg, and -bd specify
the foreground, background, and border colors, respectively.
The command line argument file
specifies a file or an URL (only Uniform Resource Locator that specifies
a file on a HTTP or FTP server are supported) of
objects to be initially edited by tgif.
(For a more detailed description of URL, the reader is referred to the
World-Wide-Web page, titled "A Beginner's Guild to HTML", located at
<URL:http://www.ncsa.uiuc.edu/General/Internet/WWW/HTMLPrimer.html>.)
If -rv (or -nv) is specified, tgif will come up
in reverse-video (or normal-video) mode.
If -bw is specified, tgif will come up in the black and white mode.
If -cwo is specified, only the canvas window (see TGIF SUBWINDOWS
section below) will be displayed.
If -hyper is specified tgif will be started in the hyperspace mode
(see HYPERSPACE section below).
This has the same effect as setting the Tgif*CanvasWindowOnly X default to true.
The default is false.
Tgif is purely based on Xlib.
It is tested under X11R6, and
it requires a 3 button mouse.
In the second form, tgif prints file1.obj, file2.obj,
etc. (generated by tgif)
into PostScript(TM) page description files
and pipes them to lpr if none of the
-eps, -p, -ps, -f, or -text options
are not specified;
in this case, any other command line options are sent to lpr.
A symbol file (see descriptions below) can also be printed by
specifying the .sym extension explicitly.
Only non-color printing is supported.
In the second form,
if the -eps or the -p option is specified,
tgif generates an Encapsulated PostScript file in file.eps;
this file is supposed to be included in a LaTeX file through the
\psfig, \epsf, or \psfile construct (see the LATEX FIGURE FORMATS section
below).
If the -ps or the -f option is specified,
it generates a PostScript file in file.ps;
this file can be printed to a PostScript printer with lpr.
If the -text option is specified,
it generates a text file in file.txt;
the text file contains all visible text and can be fed to a spell checker.
(Note that if any of the -eps, -p, -ps,
-f, or -ftext options are specified,
any other command line options are ignored.)
Using the -gray option has the same effect as setting the
Tgif*UseGrayScale X default to true (see the X DEFAULTS section below).
Using the -adobe or the -adobe=<number>/<number>
option has the same effect as specifying the
Tgif*UsePsAdobeString X default.
Using the -page option causes a specified page to be printed.
Using the -print_cmd option has the same effect as specifying the
Tgif*PrintCommand X default.
Using the -one_file_per_page option causes each page to be
printed into a separate file.
Using the -pepsc (PreserveEPSComment) option has the same effect as
setting the Tgif*StripEPSComment X default to false.
Using the -bop_hook and -fI-eop_hook options have the same effect
as specifying the Tgif*PSBopHook and Tgif*PSEpsHook X defaults.
If the -o option is not specified, the output file (eps, ps, or txt)
goes into the same directory as the input file. If -odir
is specified, the output file goes into the directory specified
by dir.
Please note that only running tgif interactively can generate X11 bitmap,
X11 pixmap, GIF, or color PostScript files.
BASIC FUNCTIONALITIES
Primitive objects supported by tgif
are rectangles, ovals, rounded-corner rectangles, arcs,
polylines, polygons, open-splines, closed-splines, text, X11 bitmaps,
some specific forms of X11 pixmaps, and Encapsulated PostScript(TM).
Objects can be grouped together to form a grouped object.
A primitive or a grouped object can be made into an icon object or a
symbol object through user commands.
Tgif objects are stored in two types of files. A file with a
.obj
extension (referred to as an object file)
is a file of objects, and a file with a
.sym
extension (referred to as a symbol file)
specifies a ``building-block'' object.
A teleport mechanism is provided to travel among the .obj files.
A building-block object consists of the
representation part and the definition
part (which can be empty) of the object.
Tgif supports the ``bottom-up'' construction of hierarchical
drawings by providing the capability to ``instantiate'' a
building-block object in a drawing. Tgif also supports the ``top-down''
specification of drawings by allowing the user to make any
object a representation
of an un-specified subsystem.
Both types of files are stored in the
form of Prolog facts. Prolog code can be written to interpret
the drawings! (It is left to the user to produce the code.
See the PROLOG/C TESTDRIVE section for more details.)
Prolog engines will be referred to as
drivers in the sections to follow. (Other types of drivers
are also allowed, e.g., written in C.)
Text based attributes can be attached to any non-text object.
Attributes specified in the representation part of a
building-block object are non-detachable when such an object is instantiated.
See ATTRIBUTES section for details.
Tgif can generate output in four different formats.
By default, the output is in the PostScript(TM) format (color PostScript
is supported), and it is generated into a file named
/tmp/Tgifa* (produced by mktemp() calls) where * is a number;
this file is piped to lpr. This takes place when the
laser-printer icon is displayed in the Choice Window (see below
for the naming of tgif windows).
This output can be redirected to a file with a
.ps
extension. This takes place when the PS icon is displayed.
When the LaTeX (or EPSI) icon is displayed, the output
is generated into a file with a
.eps
extension. This file is in the Encapsulated PostScript (or Encapsulated
PostScript Interchange) format;
it can be included in a LaTeX document with the
\psfig or the \epsf construct; this will be discussed later.
The only difference between the EPS and EPSI formats is that an EPSI
file contains a preview bitmap. However, it takes time to generate the
preview bitmap. If the EPS/EPSI file is to be incorporated into some
tool that does not know how to use the preview bitmap, time can be saved
by not using the EPSI format.
When the T icon is displayed, the output generated into a file with a
.txt
extension. This is a text file containing all visible text;
it can be fed to a spell checker.
When the x11bm (X11 bitmap) icon is displayed in the
Choice Window and color output is not selected,
tgif generates the output with the
.xbm
extension; the output is in the X11 bitmap format.
However, if the x11bm icon is displayed in the
Choice Window and color output is selected (through the ^#k
keyboard command -- ^ denotes the <Control> and # denotes the <Meta> key),
then tgif generates the output with the
.xpm
extension, and the output is in the X11 pixmap format
(the version of this XPM format depends on the settings of the
XPmOutputVersion X default).
X11 bitmap files, certain forms of X11 pixmap files
(such as the one generated by tgif; see the section on X11 PIXMAP
for details), GIF files, and Encapsulated PostScript (EPS) files
can be imported into tgif and be represented
as tgif primitive objects.
Tgif drawings are supposed to be printed on letter size paper (8.5in by 11in).
Both landscape and portrait page styles are supported by tgif.
Reduction (or magnification) can be controlled by the #% keyboard
command to set the reduction/magnification. If the compiler
flag -DA4PAPER is defined (in Imakefile or Makefile.noimake),
then the output is supposed to be printed on A4 papers (which
has approximate dimensions of 8.25in by 11.7in).
GRAPHICAL OBJECTS
An object in an object (.obj) file can be a primitive object,
a grouped object, or an icon object.
A symbol (.sym) file can have any number of objects allowed in an
object file and exactly one symbol object.
(Recall that a symbol file specifies a building-block
object.) The symbol object in a symbol file is the representation
part of the building-block object, and the rest of the
symbol file is the definition
part of the building-block object. The symbol object is highlighted
with a dashed outline to distinguish it from the rest of
the objects. When a building-block object is instantiated,
the symbol part of the file is copied into the graphics editor, and it
becomes the icon for the building-block object.
All objects in tgif can be moved, duplicated, deleted, rotated,
and flipped. (However, flipping text objects horizontally will
cause the text justification to change, and flipping text objects
vertically will usually cause the text object to move.)
All objects, except text and rigid icon objects, can be stretched
(scaled). (See the TGIF SUBWINDOWS section for the definition of rigid
icon objects.)
Tgif supports 32 fill patterns, 32 pen patterns, 7 default line widths, 4 line
styles (plain, head arrow, tail arrow, double arrows) for
polylines and open-splines, 9 dash patterns,
3 types of text justifications, 4 text
styles (roman, italic, bold, bold-italic), 11 text sizes
(8, 10, 12, 14, 18, and 24 for the 75dpi fonts and
11, 14, 17, 20, 25, and 34 for the 100dpi fonts), 5 fonts (Times, Courier,
Helvetica, New-Century-Schoolbook, Symbol), and 11 default colors (magenta,
red, green, blue, yellow, pink, cyan, cadet-blue, white, black,
dark-slate-gray).
Only right-angle rotations are supported.
Most commands in tgif can either be activated by a
popup menu or by typing an appropriate
non-alphanumeric key. All operations that change any object can be undone
and the redone. Commands such as zoom, scroll, change fonts while no
text objects are selected, etc. are not undoable. The undo/redo
history buffer size can be set using the Tgif*HistoryDepth X default.
TGIF SUBWINDOWS
The tgif windows are described below.
- Top Window
-
Displays the current domain and the
name of the file tgif is looking at. Mouse clicks
and key presses have no effect.
- Menubar Window
-
This window is right under the Top Window.
Pull-down menus can be activated from it with any mouse buttons.
Key presses have no effect. If HideMenubar() is selected from the Layout Menu,
this window becomes invisible. If ShowMenubar() is selected from the
Layout Menu (which can be activated from the Canvas Window below), this
window becomes visible.
-
The View, Text, and Graphics pull-down menus are cascading menus and can
not be pinned (see the Popup Menus subsection below for a
description).
- Message Window
-
This is right under the Menubar Window on the left.
It displays tgif messages.
Clicking the left mouse button
in this window scrolls
the messages towards the bottom, clicking the right mouse
button scrolls towards
the top, and clicking or dragging the middle mouse button scrolls
to the location in the
message history depending on where the mouse is clicked.
If the <Shift> (or <Control>) key is held down when clicking the
left/right mouse button, it scrolls right/left.
- Panel (Choice) Window
-
This is the window to the right of the Message Window, and it
contains a collection of icons (not to be confused with the tgif icon objects)
reflecting the current state of tgif.
In top/bottom, left/right order, it
displays the current drawing mode, the
page style (portrait/landscape), edit (see below),
print mode, zoom factor, constrained/unconstrained move (and stretch) mode,
radius for rounded-corner rectangles,
text rotation, page number or row/column, page layout mode
(stacked or tiled), horizontal alignment (L C R S -),
vertical alignment (T M B S -),
font, text size, vertical spacing between lines of text within
the same text object, text justification, dash pattern,
line style, polyline or spline, line width, fill pattern, pen pattern,
color, and special (see below).
Key presses have no effect in this window.
-
In addition to displaying the current state of tgif, the icons in the
Choice Window can also be used to change the current state.
Each icon is associated with a particular state variable of tgif.
Clicking the left mouse button on top of an icon cycles the
state variable associated with the icon forward; clicking the right mouse
button cycles the state variable backwards. Dragging the middle mouse button
on top of an icon usually generates a popup menu which corresponds to
an entry in the Main Menu for the Canvas Window below.
(The ``edit'' and ``special'' icons mentioned above are dummy icons
that allow the ``edit'' and ``special'' menus to be
accessed in the Choice Window. They do not respond to left and right
mouse clicks.)
The response to the dragging of the middle mouse button is different for
the zoom, radius, and vertical spacing icons. Dragging the mouse
left or up increases the zoom or decreases the radius or vertical spacing;
dragging the mouse right or down has the opposite effect.
-
If there are objects selected in the
canvas window, then the action of the mouse will cause the selected
objects to change to the newly selected mode; note that in this
case, the current choice won't change if the middle mouse button
is used.
-
The settings of the horizontal and vertical
alignments determine how objects (or vertices) align with
each other when the ^l keyboard command is issued,
how each individual object (or vertex) aligns with the grids
when the ^t keyboard command is issued,
how objects or vertices distribute spatially with respect to each other when
the #l keyboard command is issued,
and how each icon replaces the old icon when the ^#u
keyboard command is issued. The horizontal
alignments are left (L), center (C), right (R), space (S), and ignore (-).
The vertical alignments are top (T), middle (M), bottom (B), space (S), and
ignore (-). In aligning operations, the space (S) and the ignore (-)
settings have the same effect. The space settings are used to distribute
objects such that the gaps between any two neighboring objects are equal.
In vertex mode, any non-ignore setting will cause the selected vertices
to be spaced out evenly.
The best way to understand them is to try them out.
-
The text vertical spacing determines the vertical distance to advance
when a carriage return is pressed during text editing. If the user
tries to set the
value too negative, such that the next line is exactly at
the same position as the current line, such a setting will not be
allowed (this distance depends on the current font and font size).
- Canvas Window
-
This is the drawing area. The effects of the actions of the mouse is
determined by the current drawing mode. Normally, dragging the right mouse
button will generate the Mode Menu. The drawing modes are (in order,
as they appear in the Mode Menu) select, text, rectangle,
oval, polyline (open-spline), polygon (closed-spline),
arc, rounded-corner rectangle, freehand polyline (open-spline),
and select vertices. When drawing a rectangle, an oval, or a rounded-corner
rectangle, if the <Shift>
key is held down, a square, a circle, or a rounded-corner square is drawn.
Dragging the middle mouse button will generate the Main Menu.
-
In the select mode, left mouse button selects, moves, stretches,
and reshapes objects (double-click will ``de-select'' all selected objects
in vertex mode). When an object is selected, it is highlighted by
little squares at the corners/vertices (using the Tgif*HandleSize X default,
the sizes of the handles can be customized). Dragging one of the little squares
stretches/reshapes the selected object. If one wants to move the selected
object, one should not drag the little squares. Instead, one should
drag other parts of the object. For example, if the object is a
hollow rectangle (the fill is NONE and the pen is not NONE), in order to select
the rectangle, one would need to click on the outline of the rectangle
with the left mouse button. If one would like to move the rectangle, one
would need to drag the outline of the rectangle with the left mouse button.
If the object is a filled rectangle (fill is not NONE), the one can
click inside the rectangle to select it and
drag anywhere inside the rectangle to move it.
-
Holding down the <Shift> key and clicking the left mouse
on an object which is not currently selected will add the
object to the list of already selected objects. The same
action applied to an object which is already selected will cause
it to be de-selected.
When stretching objects (not reshaping poly-type objects),
holding down the <Shift> key after stretching is initiated results in
proportional stretching being activated (basically, a scale operation
is being performed).
Text and rigid icon objects can not be stretched or scaled.
(Rigid icon objects are icons that do not have an inherited
attribute whose name is empty and whose value is the string "not_rigid".
Rigid icon objects inside a non-rigid icon object are considered non-rigid.)
Clicking the middle mouse button
while the <Shift> key is held down will activate
the teleport (or travel), the launch,
or the execute internal command mechanism. See the sections on
TELEPORT, LAUNCH APPLICATIONS, and INTERNAL COMMANDS for details.
Teleporting has precedence over launching, which has precedence over
executing an internal command.
The arrow keys can also be used to move selected objects. However,
if no objects
are selected, using the arrow keys will scroll the drawing area by a small
amount, and using the arrow keys when <Control> key is held down will
scroll a screen full.
-
In the select vertices mode, left mouse button selects and moves
vertices. Only the top-level polyline/open-spline and polygon/closed-spline
objects which are selected when the vertex mode is activated
are eligible for vertex operations. In this mode, all
eligible objects have their vertices highlighted with squares.
When a vertex is selected (using similar mechanism as selecting
objects described above), it is doubly highlighted with a '+' sign.
Operations available to these doubly highlighted vertices are move, delete,
align (with each other), distribute (space them equally), and align to grid.
The arrow keys can also be used to move selected vertices.
-
Objects can be locked (through the #< command). Locked object are shown
with gray handles, and they can not be moved, stretched, flipped,
or rotated. When objects are grouped, the resulting grouped object
will also be locked if any one of it's constituents is locked.
Locked objects can have their properties, such as color, font, pen, etc.,
changed; furthermore, they can be deleted.
-
If the current move/stretch mode is of the constrained type (activated
and deactivated by the #@ command), top-level polylines will have the
following behavior. In a move operation, if both endpoints of a
polyline lie inside the objects being moved, then the whole polyline
is moved; otherwise, if only one endpoint falls inside the objects
being moved, then that endpoint is moved. The vertex that is the
neighbor of the moved endpoint may also be moved either horizontally
or vertically. If the last line segment is horizontal or vertical,
then the neighbor vertex may be moved so that the direction of the last
line segment is maintained.
In a stretch (not reshape)
operation, if an endpoint of a polyline lies inside the objects being moved,
that endpoint will be moved. The vertex that is the neighbor of
the moved endpoint will also be moved in the same manner as described above.
-
When the drawing mode is set to
text (a vertical-bar cursor is shown),
clicking the left mouse button causes selected text to go into edit mode.
Clicking the left mouse button while the <Shift> key is held down highlights
substrings of the text. Double-clicking causes a word to be selected.
In edit mode,
key presses are treated as text strings being
inputed, and arrow keys are used to move the current input
position. If a key press is preceded by an <ESC> key,
then the character's bit 7 is turned on. This allows
non-ASCII (international) characters to be entered. One can use xfd(1) to
see what the corresponding international character is for an ASCII character.
For the Symbol font, symbols such as the integral, partial derivative, and
copyright symbols can all be found in this range.
There are some characters
that are supported by X11 but not by PostScript; these characters
are not accepted by tgif.
If the text being edited is an attribute of a object, <Meta><Tab>
will move the cursor to the next visible attribute and <Shift><Tab> will
move the cursor to the previous visible attribute.
-
If the drawing mode is set to draw polygons (not closed-splines) and
if the <Shift> key is held down, the rubber-banded polygon will be self-closing.
-
The freehand drawing mode can be used to draw polylines and open splines.
All intermediate points are specified by moving the mouse (as opposed to
clicking the mouse buttons as in the polyline mode). The
second end point is specified by releasing the mouse button.
-
In all drawing modes (other than the text mode), pressing the <ESC>
key cancels the drawing of the current object.
-
Middle mouse button always generates the main
tgif popup menu. Holding down the <Shift> key and clicking the right
mouse button will change the drawing mode to select.
Key presses with the <Control> or <Meta> key held down
(referred to as non-alphanumeric key presses since
they can also generate control characters)
are treated as commands, and their
bindings are summarized in the next section. Users can also
define single key commands to emulate the functions of the
non-alphanumeric key commands.
The SHORTCUTS section will describe the details.
- Scrollbars
-
Clicking the left mouse button in the vertical/horizontal scrollbar causes the
canvas window to scroll down/right by a small distance; clicking the
right mouse button has the reverse effect. (The scrollbars in the popup
windows for selecting file names and domain names behave similarly.)
Clicking with the <Shift> key held down will scroll a window full.
Clicking or dragging the middle button will cause the page to scroll
to the location which corresponds to the gray area in the scrollbars.
(Tgif insists that the left top corner of the Canvas Window is at
a distance that is a nonnegative multiple of some internal units
from the left top corner of the actual page.)
- Rulers
-
They track the mouse location.
Mouse clicks and key presses have no effect.
When the page reduction/magnification is set at 100%,
the markings in the rulers correspond to centimeters when the metric
grid system is used, and they correspond to inches when the English
grid system is used. When the page reduction/magnification is not
set at 100%, the markings do not correspond to the above mentioned
units any more.
- Interrupt/Hyperspace Window
-
This window is right below the Message Window and to the left of the
horizontal ruler. When the Tgif*IntrCheckInterval X default has a
positive value, an interrupt icon is visible when the Canvas Window
is being redrawn. If the user clicks on this window when the
interrupt icon is visible, tgif aborts the repainting of the objects.
If this is done when a file is being opened (either through Open()
or Push()), the drawing of objects is stopped, but the reading of
the file continues (reading of the file is not aborted).
-
If tgif is currently in the hyperspace mode (please see the HYPERSPACE
section below for more details), a space ship icon will be displayed when
the interrupt icon is not being displayed. Clicking any button in this
window will switch tgif in and out of the hyperspace mode.
- Status Window
-
This window is below the horizontal scrollbar. It shows what action
will be taken if a mouse button is depressed. When a menu is pulled down
or poped up, this window shows what action will be taken if a menu item
is selected. It also displays miscellaneous status information.
Mouse clicks and key presses have no effect.
If HideStatus() is selected from the Layout Menu,
this window becomes invisible. If ShowStatus() is selected from the
Layout Menu, this window becomes visible.
-
By default, when this window is displaying mouse button status,
right-handed mouse is assumed. Setting the Tgif*ReverseMouseStatusButtons
X default to true will reverse the status (as if a left-handed mouse is used).
- Popup Menus
-
When a menu is poped up by a mouse drag, the menu can be pinned
if it is dragged far enough horizontally
(the distance is determined by the
setting of the Tgif*MainMenuPinDistance X default).
Clicking the right mouse
button in a pinned menu will cause it to disappear. Dragging
the left mouse button in a pinned menu will reposition the menu.
Clicking the middle mouse button in it will activate the clicked item.
NON-ALPHANUMERIC KEY BINDINGS
Most operations that can be performed in tgif can be activated
through non-alphanumeric keys (a few operations can only be
activated through popup menus or shortcut keys).
This section summarizes the operations that can be activated
by a key stroke with the <Control> and/or the <Meta> key held down.
``^'' denotes the <Control> key and ``#'' denotes the <Meta> key
in the following description. (The ``keys.obj'' file, distributed
with tgif, also summarizes the same information, but it is organized
differently. This file can be viewed with tgif, and if installed properly,
it can be found in the same directory as the ``tgificon.obj'' file,
mentioned in the FILES section of this document.)
^a select all
^b send selected objects to the back
^c change domain
^d duplicate selected objects
^e save/restore drawing mode
^f send selected objects to the front
^g group selected objects (the grouped object will be brought to the front)
^i instantiate a building-block object
^k pop back to (or return to) a higher level and close the symbol file
(reverse of ^v)
^l align selected objects according to the current alignment settings
^n open a new un-named object file
^o open an object file to edit
^p print the current page (or export in xbm, xpm, eps, or ps formats)
^q quit tgif
^r redraw the page
^s save the current object/symbol file
^t align selected objects to the grid according to the current alignment
^u ungroup selected objects
^v push into (or edit) the definition part of a building-block (icon)
object
^w change the drawing mode to text
^x delete all selected objects
^y copy selected objects into the cut buffer
^z escape to driver
^, scroll left
^. scroll right
^- print the current page with a specified command
#a attach selected text objects to a selected non-text object as attributes
#b escape to driver
#c rotate selected objects counter-clockwise
#d decrement the grid size
#e send a token on a selected polyline
#f flash a selected polyline
#g show/un-show grid points
#h flip the selected objects horizontally
#i increment the grid size
#j hide the attribute names of the selected objects
#k change the drawing mode to select
#l distribute selected objects according to the current alignment
#m move/justify an attribute of a selected object
#n show all the attribute names of the selected objects
#o zoom out
#p import a .obj or a .sym file into the current file
#q change the drawing mode to polyline/open-spline
#r change the drawing mode to rectangle
#s escape to driver
#t detach all the attributes of the selected objects
#u undo
#v flip the selected objects vertically
#w rotate the selected objects clockwise
#x escape to driver
#y escape to driver
#z zoom in
#9 create a user-specified arc (12 o'clock position is 0 degree)
#0 update the selected objects according to current settings
#, scroll up
#. scroll down
#- show all the attributes of the selected objects
#[ align the left sides of objects
#= align the horizontal centers of objects
#] align the right sides of objects
#{ align the top sides of objects
#+ align the vertical centers of objects
#} align the bottom sides of objects
#" make the selected polygon regular (fit the original bounding box)
#% set the percent print reduction (if < 100%) or magnification (if > 100%)
#: go to default zoom
#` zoom out all the way so that the whole page is visible
#~ saved selected objects in a new file
#; cut and/or magnify a selected bitmap/pixmap object
#_ abut selected objects horizontally
#| abut selected objects vertically
## break up text objects into single character text objects
#^ scroll to the origin set by SaveOrigin()
#@ toggle between constrained and unconstrained move (stretch) modes
#$ change the drawing mode to select vertices
#& align selected objects to the paper according to the current alignment
#* redo
#( import an Encapsulated PostScript file
#) scale selected objects by specifying X and Y scaling factors
#< lock the selected objects (can't be moved, stretched, flipped, or
rotated)
#> unlock the selected objects
^#a add points to the selected poly or spline
^#b change the text style to bold
^#c change to center justified text
^#d delete points from the selected poly or spline
^#e change the drawing mode to rounded-corner rectangles
^#f reverse-video the selected bitmap objects
^#g toggle snapping to the grid points
^#h hide all attributes of the selected objects
^#i make the selected object iconic
^#j make the selected icon object a grouped object
^#k select color or black-and-white output
^#l change to left justified text
^#m make the selected object symbolic
^#n make the selected symbol object a grouped object
^#o change the text style to roman
^#p change the text style to bold-italic
^#q change the drawing mode to polygon/closed-spline
^#r change to right justified text
^#s save the file under a new name
^#t change the text style to italic
^#u update iconic representations of selected objects
^#v change the drawing mode to oval
^#w toggle between poly and spline
^#x cycle among the various output file formats
^#y paste from the cut buffer
^#z change the drawing mode to arcs
^#. import an X11 bitmap file
^#, import an X11 pixmap file
^#- toggle between English and Metric grid systems
SHORTCUTS
The user can define single character shortcut keys to emulate
the function of
the non-alphanumeric key presses to activate commands.
This is done through the use of the Tgif*ShortCuts X default.
(Please note that these shortcut keys are only active when
the drawing mode is not set to the text mode.)
The Tgif*ShortCuts consists of a list of items, each of which
specifies the bindings between
a key (may be case sensitive) and a command. The items are
separated by blanks, and each item is interpreted as
follows. It consists of two parts, KEY and COMMAND, which
are concatenated together with a ':' character.
The format of the KEY part is one of
:<Key>x, !<Key>x, or <Key>x (here the
character 'x' is used as an example; furthermore, the substring
<Key> must be spelled exactly the way it appears here).
The first 2 formats are
equivalent, they specify the lower case x; the 3rd
format specifies both the characters 'x' and 'X'.
The COMMAND part is a string that matches strings in tgif's popup menus
(exceptions are noted below). This is illustrated by
the following example. In the Edit menu, two of the entries are,
"Delete ^x"
"SelectAll ^a"
which means that <Control>x activates and Delete() command,
and <Control>a activates the SelectAll() command.
Therefore, both Delete() and SelectAll() are valid names for the COMMAND part of
a shortcut specification. To complete the example,
the following line can be used to bind the lower case 'x' to
Delete() and 'a' or 'A' to SelectAll():
Tgif*ShortCuts: !<Key>x:Delete() \n\
<Key>a:SelectAll()
For more examples, please
see the sample X defaults file, tgif.Xdefaults, included in the tgif
distribution.
Here is a list of exceptions where the COMMAND does not match
a command name in a menu entry. The left entry is a proper
COMMAND name, and the right is a list of strings that's shown
in popup menus which the COMMAND would correspond to.
CyclePrintFormat() Printer, LaTeXFig, RawPSFile, XBitmap, TextFile, EPSI, GIF/ISMAP
ToggleBW/ColorPS() BlkWhtPS, ColorPS
ToggleGridSystem() EnglishGrid, MetricGrid
ToggleMapShown() ShowBit/Pixmap, HideBit/Pixmap
ToggleUseGrayScale() UseGrayScale, NoGrayScale
ToggleMoveMode() ConstMove, UnConstMove
ToggleShowMeasurement() ShowMeasurement, HideMeasurement
ToggleLineType() (advances between different curved shapes)
ScrollPageUp() (scroll up a window full)
ScrollPageDown() (scroll down a window full)
ScrollPageLeft() (scroll left a window full)
ScrollPageRight() (scroll right a window full)
FreeHandMode() (change the drawing mode to freehand poly/open-spline)
CenterAnEndPoint() (move an endpoint of a polyline object to the center
of another object)
ToggleNamedAttrShown(<x>=) (toggle name shown for the attribute <x>)
ToggleSmoothHinge() (convert smooth to hinge and hinge to smooth points)
ToggleShowMenubar() ShowMenubar, HideMenubar
ToggleShowStatus() ShowStatus, HideStatus
ToggleOneMotionSelMove() OneMotionSelMove, ClickSelClickMove
ToggleHyperSpace() GoHyperSpace, LeaveHyperSpace
In addition to the above list, the following are
also valid COMMAND names (having the obvious meaning):
ScrollLeft(), ScrollRight(), ScrollUp(), ScrollDown(),
SelectMode(), DrawText(), DrawBox(), DrawOval(), DrawPoly(),
DrawPolygon(), DrawRCBox(), DrawArc(), and SelectVertexMode().
OBJECT NAMES
If an object contains an attribute (please see the ATTRIBUTES sections
below for details) whose name is the string "name" (case-sensitive),
the value part
of the attribute is the name of the object. Subobject of a
composite object can be named using a path, e.g.,
<t>!<s1>!<s2>, where <t> is the name of a top-level object
which directly contains <s1> which directly contains <s2>.
The following is not fully support, yet (only the #<page>
form is supported at this time).
Every object in a tgif file can be uniquely named using the notation
#<page>!<path>, where <page> can be a string that specifies the
name of a page or #<number> which specifies a page number. The
<path> is described in the previous paragraph. If an object o1
is referenced by another object o2 within the same file
(no file name or URL is specified before #) and <page> is
omitted, then o1 must be on the same page as o2.
If a file name or URL is specified before # and <page> is
omitted, then o1 must be on the first page.
ATTRIBUTES
Attributes are text strings of the form name=value or value
which are attached to either the current drawing or any non-text objects.
An attribute attached to the current drawing is called a file attribute;
otherwise, it is a regular attribute.
Attributes can be attached and detached from these objects
except in the following case:
-
Attributes appearing in the symbol object
in a building-block object file can not
be detached when the building-block object is instantiated.
These attributes are considered to be the ``inherited'' attributes
of the icon object. (If it is really necessary to detach inherited
attributes of an icon object, the icon object
can be ``de-iconified'' by using UnMakeIconic() in the Special Menu
to make it a grouped object; then the attributes can be detached.)
A file attribute is always invisible.
For a regular attribute,
the user has control over which part of the attribute is displayed.
An entire attribute can be made invisible, or only its name
can be made invisible (accomplished through the commands under the
special menu, such as #m, #n, #j, #-, and ^#h).
TELEPORT
Tgif provides the mechanism to travel between .obj and .sym files.
If the middle mouse button is clicked on an object with the
<Shift> key held down, tgif looks for an attribute named
warp_to (by default) or href of that object.
The only difference between warp_to and href is that
".obj" is automatically appended to the value of a warp_to
attribute while the value of a href attribute is taken as is.
(Please note that warp_to is obsolete now. It is still
supported for the sake of compatibility.)
If such an attribute is found, the value part of
the attribute is interpreted as the name of a .obj file to
travel to.
(If tgif is in the hyperspace mode, then clicking
the left mouse button has the same effect.)
If there are multiple href attributes on the object,
but are in different colors, tgif will use the one that has
the same color as the current color appearing in the Choice Window.
If the current file is modified, the user
is prompted to save the file before traveling to the next file.
If there are multiple href attributes on the object,
but are in different colors, tgif will use the one that has
the same color as the color appearing in the Choice Window.
If the value part of the href attribute starts with the '/'
character, the value is treated as an absolute file name;
otherwise, it is treated as a relative file name.
HYPERSPACE
Tgif provides a hyperspace mode to facilitate traveling
between .obj files. The hyperspace mode is entered when
GoHyperSpace() is selected from the Navigate Menu. When in
hyperspace, the little window below the Message Window will show
a little space ship. The hyperspace mode is also automatically
entered when a remote URL is opened (unless the Tgif*AutoHyperSpaceOnRemote
X default is set to false).
In the hyperspace mode, certain objects are considered hot-links.
When the cursor is placed on top of these object, it will change from
a pointer to a hand to indicate that clicking on the left mouse button
will invoke some actions.
An object is a hot-link if it contains an attribute described in either
the TELEPORT, LAUNCH APPLICATIONS, or INTERNAL COMMANDS section.
The hyperspace mode is exited when the drawing mode is changes.
LAUNCH APPLICATIONS
Tgif provides the mechanism to launch applications.
If the middle mouse button is clicked on an object with the
<Shift> key held down, tgif
looks for an attribute named launch (by default) of
that object. If such an attribute is found, the value part of
the attribute is interpreted as a sh(1) command to execute.
Same color rule applies as described in the TELEPORT section above.
If the command ends with the '&' character, tgif forks itself (what
actual happens depends on whether the _BACKGROUND_DONT_FORK
compiler flag is defined or not at compile time) and
the command is executed by the child process; otherwise, popen()
is used to execute the command (in this case, if the command hangs,
there is no way provided to terminate the command, and
tgif will not be able to recover from it).
Within the command, values of other attributes of the same object can
be used. The syntax is: $(attr), where attr is the name
of another attribute.
For example, if one wants to perform a man(1) function, one can draw
a box; enter a line of text "title=tgif"; enter another line of text
"launch=xterm -rw -e man $(title)"; select all three objects using ^a
keyboard command; attach the text strings to the box using #a keyboard
command; and launch the man(1) command by clicking the middle mouse button
on the box (or the text strings) withe the <Shift> key held down.
If one wants to be more fancy, the box can be replaced by an X11 pixmap
object; the 'launch' attribute can be made invisible; and the 'title'
attribute can be center justified and with its name hidden using the #m
keyboard command.
By default, launching of an application is disabled in hyperspace mode.
However, this can be overridden by the Tgif*AllowLaunchInHyperSpace X default
setting.
INTERNAL COMMANDS
Tgif provides the mechanism to execute internal commands.
If the middle mouse button
is clicked on an object with the <Shift> key held down, tgif looks for an
attribute named exec (by default) of that object. If such an
attribute is found, the value part of the attribute is interpreted as
a list of internal commands (separated by semicolor) to execute.
Same color rule applies as described in the TELEPORT section above.
A command usually takes the form:
-
<cmd_name> ( <arg1>, <arg2>, ..., <argN> )
An argument of a command can be a string argument or a numeric argument.
A string argument must be enclosed in double-quotes. A numeric argument
can be a numerical value or a string of the form "$(x)", where x
is the name of another attribute (this form is referred as the
substitution form). A string argument can also contain substitution form.
Please note that only one-level substitution are performed (the
collection of internal commands should be viewed as a simple
scripting language and not a declaration language).
When an attribute is referenced in an internal command, the attribute
name can be in the form, <obj_name>.<string>, where <obj_name>
must be in the form specified in the OBJECT NAMES section above
and <string> contains only alphanumeric characters and
the underscore ('_') character.
The following internal commands are supported:
- launch(<attr_name>)
-
The value of the attribute specified by <attr_name> is interpreted as a
sh(1) command to execute. Please see the LAUNCH APPLICATIONS section
above for more details.
- exec(<attr_name>)
-
The value of the attribute specified by <attr_name> is interpreted as an
internal command to execute. This is similar to a subroutine call.
Please note that the internal command is executed in the context of the
top-level which contain the attribute.
- mktemp(<str>,<attr_name>)
-
This command makes a unique file name.
The <str> argument is a template string, e.g., "/tmp/TgifXXXXXX".
The result of mktemp is stored as the value of the attribute specified
by <attr_name>.
Please see the man pages of the C library function on mktemp for more details.
- create_file_using_simple_template(<template>,<output>,<str>,<attr_name>)
-
The file specified by <template> is scanned for a line that matches <str>.
When such a line is found, that line is replaced by the value of the
attribute specified by <attr_name>. The result is put into the file
specified as <output>.
- update_eps_child(<eps_file_name>)
-
This only works if the object being executed is a composite object.
If the object has a component which is an imported EPS (Encapsulated
PostScript) object, it is replaced by the EPS file specified by
<eps_file_name>. If the object does not contain an EPS subobject,
an EPS subobject is created.
- update_xbm_child(<xbm_file_name>)
-
This only works if the object being executed is a composite object.
If the object has a component which is an imported XBM (X11 bitmap) object,
it is replaced by the XBM file specified by <xbm_file_name>.
If the object does not contain an XBM subobject, an XBM subobject is created.
- update_xpm_child(<xpm_file_name>)
-
This only works if the object being executed is a composite object.
If the object has a component which is an imported XPM (X11 pixmap) object,
it is replaced by the XPM file specified by <xpm_file_name>.
If the object does not contain an XPM subobject, an XPM subobject is created.
- flip_deck(<times>,<frames_per_second>,<style>)
-
This only works if the object being executed is a composite object
and all subobjects of the composite object are X11 bitmap or X11 pixmap
objects and have identical positions and sizes.
The <times> argument specifies the number of times the deck is flipped.
It can be a number or the string "infinite".
The <frames_per_second> argument must be a number between 1 and 60.
The <style> argument can be either "linear" or "ping_pong".
When this command is being executed, any mouse button click or key click
aborts command execution.
- read_file_into_attr(<file_name>,<attr_name>)
-
This command reads a file into an attribute.
The <file_name> argument names a file, e.g., "/tmp/foo".
The content of the file is read as the value of the attribute specified
by <attr_name>. If the file can not be opened for read, the attribute's
value is set to an empty string.
- write_attr_into_file(<attr_name>,<file_name>)
-
This command writes the value of an attribute into a file.
The <file_name> argument names a file, e.g., "/tmp/foo".
The value of the attribute specified by <attr_name> is
written into <file_name>.
- append_attr_into_file(<attr_name>,<file_name>)
-
This command appends the value of an attribute into a file.
The <file_name> argument names a file, e.g., "/tmp/foo".
The value of the attribute specified by <attr_name> is
appended into <file_name>.
- select_obj_by_name(<obj_name>)
-
This command silently (no highlighting handles) selects an
object named <obj_name>. Please see the OBJECT NAMES section
above for the specification of object names.
- unselect_all_obj()
-
This command de-selects all selected objects. If the select_obj_by_name()
command is used, this command must be used eventually.
- move_selected_obj_relative(<dx>,<dy>)
-
This command moves the selected object by <dx> absolute units in the
x direction and <dy> absolute units in the y direction.
- repeat(<cmd_attr_name>,<times>)
-
This command executes the internal command in the <cmd_attr_name> attribute
<times> times.
- hyperjump(<attr_name>)
-
This command teleports to the file name or URL name found in the
<attr_name> attribute.
- make_cgi_query(<dest_attr_name>,<url_name>,<list_attr_name>)
-
This command constructs an URL in the Common Gateway Interface (CGI)
format in the <dest_attr_name> attribute.
<url_name> names the CGI server script and <list_attr_name> names an attribute
whose value are comma-separated attribute names. For example, if an
object has the following attributes:
-
-
attr_list=last_name,first_name
last_name=Cheng
first_name=Bill
final_url=
exec=make_cgi_query(final_url,
http://bourbon.cs.ucla.edu:8001/cgi-bin/test-cgi,
attr_list)
Executing this object will construct the following string in final_url:
-
http://bourbon:8001/cgi-bin/test-cgi?last_name=Cheng&first_name=Bill
An subsequent hyperjump(final_url) command can be invoked to execute the
corresponding
"test-cgi" CGI server script with the last_name and first_name arguments.
For a detailed description of CGI scripts, the reader is referred to the
World-Wide-Web page <URL:http://hoohoo.ncsa.uiuc.edu/cgi/overview.html>,
titled "The Common Gateway Interface".
- wait_click(<cursor_name>,<grab>,<attr_name>)
-
This command displays the <cursor_name> cursor and waits for the user to
click a mouse button.
If <cursor_name> is the string NULL (case-sensitive),
the cursor will not change.
If <Btn1> is clicked, the command terminates and
1 is placed in <attr_name>. If <Btn2> is clicked, 2 is placed in <attr_name>,
etc. If <grab> set to TRUE (case-sensitive), then the mouse is
grabbed by tgif. Valid
<cursor_name> can be found in <X11/cursorfont.h> (without the XC_ prefix).
- sleep(<cursor_name>,<ms_interval>)
-
This command displays the <cursor_name> cursor and waits for <ms_interval>
milliseconds to elapse.
If <cursor_name> is the string NULL (case-sensitive),
the cursor will not change.
This command can be interrupted (and aborted)
by any mouse clicks or key strokes.
Valid <cursor_name> can be found in <X11/cursorfont.h>
(without the XC_ prefix).
- begin_animate()
-
This command is used to start an animation sequence. By default, tgif
prepares for undo/redo. For a long animation sequence, the undo/redo
records may take up a lot of memory. In this case, disable_undo() (described
below) should be used before this command.
- end_animate()
-
This command is used to terminate an animation sequence.
- set_redraw(<true_or_false>)
-
This command is used to temporarily disable redraw if <true_or_false>
is FALSE (case-sensitive). If a shuffle_obj_to_top() command is
used before a move command, set_redraw(FALSE) and set_redraw(TRUE)
should be used immediately before and immediately after, respectively, the
shuffle_obj_to_top() command.
- set_selected_obj_color(<color_str>)
-
This command changes the color of the selected object to <color_str>.
- set_selected_obj_fill(<fill_index>)
-
This command changes the fill pattern of the selected object to
<fill_index>, which must be between 0 (for
no fill) and 31.
- set_selected_obj_pen(<pen_index>)
-
This command changes the pen of the selected object to <pen_index>,
which must be between 0 (for no pen) and 31.
- set_selected_obj_line_width(<width>,<arrow_w>,<arrow_h>)
-
This command changes the line width, arrow width, and arrow_h of the
selected object to <width>, <arrow_w>, and <arrow_h>,
respectively. If <arrow_w> or <arrow_h> is -1, the
arrow width or arrow height, respectively, is not changed.
- set_selected_obj_spline(<spline_type>)
-
This command changes the spline type of the selected object to
<spline_type>, which can be straight, spline, or
interpolated.
- set_selected_obj_arrow(<arrow_type>)
-
This command changes the arrow type of the selected object to
<arrow_type>, which can be none, right, left, or
double.
- set_selected_obj_dash(<dash_index>)
-
This command changes the dash type of the selected object to
<dash_index>, which must be between 0 (solid) and 8.
- inc(<attr_name>,<expr>)
-
This command increment <attr_name> by the expression
<expr>. Both the value of <attr_name> and <expr> must be integers.
Please see the ARITHMETIC EXPRESSIONS section below for details about
expressions.
- dec(<attr_name>,<expr>)
-
This command decrement <attr_name> by
<expr>. Both the value of <attr_name> and
<expr> must be integers.
- shuffle_obj_to_top(<obj_name>)
-
This command move <obj_name> to the top. If <obj_name>
is a subobject, it is raised to the top, relative to its siblings.
This command is useful in animation where a selected frame (subobject)
can be raised to the top.
- disable_undo()
-
This command cleans up the undo/redo records and disable undo (and
stop recording undo/redo information). The original history depth
is saved away.
This command should be used before a long animation sequence.
- enable_undo()
-
This command restores the history depth saved away by the disable_undo()
command and enables undo/redo.
This command should be eventually used after disable_undo() is called.
- get_drawing_area(<ltx_attr>,<lty_attr>,<rbx_attr>,<rby_attr>)
-
This command stores the absolute coordinate of the current drawing
area in the specified attributes.
<ltx_attr> stores the left-top X coordinate,
<lty_attr> stores the left-top Y coordinate,
<rbx_attr> stores the right-bottom X coordinate, and
<rby_attr> stores the right-bottom Y coordinate.
- get_selected_obj_bbox(<ltx_attr>,<lty_attr>,<rbx_attr>,<rby_attr>)
-
This command stores the absolute coordinate of the bounding box
of the selected object in the specified attributes.
<ltx_attr> stores the left-top X coordinate,
<lty_attr> stores the left-top Y coordinate,
<rbx_attr> stores the right-bottom X coordinate, and
<rby_attr> stores the right-bottom Y coordinate.
The bounding box is computed assuming that all lines are of width 0.
- move_selected_obj_absolute(<ltx>,<lty>)
-
This command moves left-top corner of the selected object to (<ltx>,<lty>).
- assign(<attr_name>,<expr>)
-
This command assigns <expr> to <attr_name>.
<expr> must be evaluated to a numeric value.
- strcpy(<attr_name>,<string>)
-
This command copies <string> into <attr_name>.
- while(<expr>,<cmd_attr_name>)
-
This command keeps executing the internal command in
<cmd_attr_name> until <expr> evaluates to 0.
- if(<expr>,<then_cmd_attr_name>,<else_cmd_attr_name>)
-
If <expr> evaluates to 0, the internal command in
<else_cmd_attr_name> is executed; otherwise, the
internal command in <then_cmd_attr_name> is executed.
<then_cmd_attr_name> or <else_cmd_attr_name> can be
the string NULL (case-sensitive);
in this case, no corresponding action is taken.
- get_current_file(<attr_name>)
-
This command stores the full path name of the current file in <attr_name>.
- getenv(<attr_name>,<env_var_name>)
-
This command stores the environment variable named <env_var_name>
in <attr_name>.
- strlen(<attr_name>,<string>)
-
This command assigns the number of characters in <string> to <attr_name>.
- substr(<attr_name>,<string>,<start_index>,<length>)
-
This command copies <length> characters, starting from the character index
<start_index>, of <string> into <attr_name>.
- strstr(<attr_name>,<string>,<sub_string>)
-
This command finds the first occurrence of <sub_string> in <string> and
copies <sub_string> and the rest of the string into <attr_name>.
- strrstr(<attr_name>,<string>,<sub_string>)
-
This command finds the last occurrence of <sub_string> in <string> and
copies <sub_string> and the rest of the string into <attr_name>.
- unmake_selected_obj_iconic()
-
This command has the same effect as selecting UnMakeIconic() from the
Special Menu except that at least one object must be selected already.
- hyperjump_then_exec(<attr_name>,<attr_name_to_exec>)
-
This command teleports to the file name or URL name found in the
<attr_name> attribute then executes the internal command specified by the
<attr_name_to_exec> attribute in the new file.
ARITHMETIC EXPRESSIONS
Certain internal commands allow arithmetic expressions as arguments.
Infix notation is used. Supported operators (and their precedences)
are listed below.
? 1 if-then-else, e.g. <rel> ? <iftrue> : <else>
: 2 if-then-else, e.g. <rel> ? <iftrue> : <else>
|| 3 logical OR
&& 4 logical AND
| 5 bit-wise OR
^ 5 bit-wise XOR
& 5 bit-wise AND
== 6 equal
!= 6 not-equal
> 7 greater than
< 7 less than
>= 7 greater than or equal to
<= 7 less than or equal to
<< 8 shift left
>> 8 shift right
+ 9 add
- 9 subtract
* 10 multiple
/ 10 divide
// 10 integer divide
% 10 mod
! 11 logical NOT
~ 11 bit-wise invert/NOT
) 12 closed parenthesis
( 13 open parenthesis
- show_attr(<attr_name>)
-
This command makes the <attr_name> attribute visible.
- hide_attr(<attr_name>)
-
This command makes the <attr_name> attribute invisible.
- show_attr_name(<attr_name>)
-
This command makes the name part of the <attr_name> attribute visible.
- hide_attr_name(<attr_name>)
-
This command makes the name part of the <attr_name> attribute invisible.
- get_attr_bbox(<ltx_attr>,<lty_attr>,<rbx_attr>,<rby_attr>,<attr_name>)
-
This command stores the absolute coordinate of the bounding box
of the <attr_name> attribute in the specified attributes.
<ltx_attr> stores the left-top X coordinate,
<lty_attr> stores the left-top Y coordinate,
<rbx_attr> stores the right-bottom X coordinate, and
<rby_attr> stores the right-bottom Y coordinate.
The bounding box is computed assuming that all lines are of width 0.
- size_selected_obj_absolute(<abs_w>,<abs_h>)
-
This command stretches the right bottom corner of the selected object
so that its width becomes <abs_w> and height becomes <abs_h>.
- message_box(<attr_name>,<msg>,<title>,<style>)
-
This command displays a messagebox with <title> as the title and <msg>
as the message. <style> can be the string "info", "ync", "yn", or "stop".
The messagebox display an OK button for the "info" or "stop" styles,
YES/NO/CANCEL buttons for the "ync" style, YES/NO buttons for the "yn" style.
When the user click a button in the messagebox, the name of the button
will be placed in <attr_name>. If the user cancels the messagebox by
typing the <ESC> key, <attr_name> will be set to the string "CANCEL".
If <attr_name> is the string NULL (case-sensitive), the information
about which button is clicked is not written anywhere. If <title> is
the string NULL, Tgif will be the title for the messagebox.
- get_user_input(<attr_name>,<msg1>,<msg2>)
-
This command displays a dialogbox with <msg1> in the first line and
<msg2> in the second line. If <msg2> is the string "USE_CURRENT_DIR",
the second line displays the current directory. The user can type in
a line in the dialogbox which get placed in <attr_name>. If the user
cancels the dialog by typing the <ESC> key, <attr_name> will be set to
the empty string.
- add_attr_to_selected_obj(<attr_name>,<attr_value>,<abs_x>,<abs_y>)
-
This command adds <attr_name>=<attr_value> to a selected object and
place the attribute at (<abs_x>,<abs_y>). If <attr_name> is the string
NULL (case-sensitive), the attribute's name will be the empty
string. If <abs_x> and <abs_y> are both NULL (case-sensitive),
the attribute will be placed below the lower left corner or the object.
- user_end_an_edge(<attr_name>,<abs_x>,<abs_y>)
-
This command starts a polyline/open-spline at (<abs_x>,<abs_y>),
switches the drawing mode to the draw polyline/open-spline, and
lets the user finishes the polyline/open-spline. If the endpoint
falls in an object having an attribute type=port, that object's
name will be placed in <attr_name>, if <attr_name> is not the string
NULL (case-sensitive).
- user_draw_an_edge(<start_attr_name>,<end_attr_name>)
-
This command switches the drawing mode to the draw polyline/open-spline and
lets the user draw a polyline/open-spline.
If the first endpoint falls in an object having an attribute
type=port, that object's name will be placed in <start_attr_name>,
if <attr_name> is not the string NULL (case-sensitive).
If the last endpoint falls in an object having an attribute
type=port, that object's name will be placed in <end_attr_name>,
if <attr_name> is not the string NULL (case-sensitive).
- get_a_poly_vertex_absolute(<x_attr_name>,<y_attr_name>,<obj_name>,<index>)
-
This command stores the absolute coordinate of the <index>th vertex
of <obj_name> in attributes specified by <x_attr_name> and <y_attr_name>.
The object specified by <obj_name> must be either a poly/open-spline or a
polygon/closed-spline object.
- move_a_poly_vertex_absolute(<obj_name>,<index>,<abs_x>,<abs_y>)
-
This command moves the <index>th vertex
of <obj_name> to the absolute coordinate (<abs_x>,<abs_y>).
The object specified by <obj_name> must be either a poly/open-spline or a
polygon/closed-spline object.
- post_attr_and_get_cgi_result(<url_attr>,<query_attr>,<result_attr>)
-
This command makes a HTTP request using the POST method.
<url_attr> names the attribute that contains the URL (which usually names
a CGI server script). <query_attr> names
the attribute whose value is the data to be posted. <result_attr> names
the attribute for receiving the results.
For example, if an object has the following attributes:
-
-
url=http://bourbon.cs.ucla.edu:8001/cgi-bin/echo-post
query=Hello World!
result=
exec=post_attr_and_get_cgi_result(url,query,result)
Executing this object will post "Hello World!" to the specified
CGI script. In this case, the result of executing the script just
echoes "Hello World!" back (along with some other bookkeeping information).
- navigate_back()
-
This command performs the same operation as if the NavigateBack() is
selected from the Navigate Menu.
- stop()
-
This command stops the execution of all internal commands.
- sqrt(<attr_name>,<expr>)
-
This command assigns the square-root of <expr> to <attr_name>.
<expr> must be evaluated to a non-negative numeric value.
- random(<attr_name>)
-
This command assigns a random integer to <attr_name> using the C
library function rand().
- round(<attr_name>,<expr>)
-
This command assigns the round of <expr> to <attr_name>.
- redraw_obj(<obj_name>)
-
This command redraws the area occupied by <obj_name>.
- redraw_drawing_area()
-
This command redraws the whole drawing area (visible through
the Canvas Window).
- itox(<attr_name>,<digits>,<expr>)
-
This command assigns <attr_name> to be the hex value of <expr>.
<digits> (which must be between 1 and 8, inclusive) is the final
width of the hex value (zeroes are added on the left).
- for_i(<attr_name>,<min_val>,<max_val>,<increment>,<cmd_attr_name>)
-
This command is the same as the following sequence of commands:
-
-
assign(<attr_name>,<min_val>);
while($(<attr_name>) <= <max_val>,loop)
where loop has the following value:
-
exec(<cmd_attr_name>);
inc(<attr_name>,<increment>)
Please note that <min_val>, <max_val>, and <increment> are
only evaluated once prior the execution of this command.
GENERATING NCSA IMAGEMAP AND CERN CLICKABLE IMAGE FILES
This section describes how to generate NCSA imagemap and CERN
clickable image files.
The Tgif*ImageMapFileFormat X default decides whether to generate
a NCSA imagemap or a CERN clickable image file.
Since the two formats are very similar, we will
only discuss how to generate NCSA imagemap files.
For more information about NCSA imagemap, please see
<URL:http://hoohoo.ncsa.uiuc.edu/docs/setup/admin/Imagemap.html>.
For more information about CERN clickable image, please see
<URL:http://www.w3.org/hypertext/WWW/Daemon/User/CGI/HTImageDoc.html>.
The Tgif*GenerateImageMap X default should be set to ``true''
to enable the imagemap generation.
When printing in the GIF format (see the BASIC FUNCTIONALITIES
section about printing), an XPM file (which will be removed at the end
of this process) is generated first.
(The value specified by the Tgif*InitExportPixelTrim X default is
used to trim extra pixels. Using these values forms an escape
mechanism to fix an idiosyncrasy that tgif can not figure out exactly
how big the whole image is.)
The XPM version is specified by
the Tgif*XPmOutputVersion X default unless the Tgif*UseXPmVersion1ForImageMap
X default is set to ``true'', which forces the XPM1 format. Then the command
specified by the Tgif*XpmToGif X default is executed to convert the
XPM file into a GIF (Generic Interchange Format) file which can be used by
software such as NCSA's Mosaic(1). The file extension for the GIF file is
specified by the Tgif*GifFileExtension X default. Together with the
GIF file, an imagemap file with file extension specified by the
Tgif*ImageMapFileExtension X default is generated. The content of the
imagemap is generated as follows.
Tgif first looks for a file attribute with attribute name href.
The value of the attribute is written as the default URL.
If such a file attribute can not be found, imagemap generation is aborted.
If it is found, then all objects in the file are scanned.
For an object having an
attribute named href, the value of the attribute is written
as the URL for a method line in the imagemap.
If the object is neither a circle nor a poly/polygon, the rectangle
method is used.
GENERATING EPSI FILE FOR SOME MICROSOFT WINDOWS APPLICATIONS
Some Microsoft Windows (TM) applications do not understand standard
PostScript %%BeginPreview, %%EndImage, and %%EndPreview comments.
This section describes how to generate an EPSI file which is understood
by them. If the Tgif*TiffEPSI X default is set to ``true'' and one
prints in the EPSI format, this feature will be invoked. In this case,
the generated EPSI file will contain 30 bytes of binary information in
the beginning of the file and a TIFF image (also binary) at the end of
the file. This file also will not contain the
%%BeginPreview, %%EndImage, and %%EndPreview comments.
A file in this format is normally not considered to be a
PostScript file except under Windows.
When this feature is enabled, tgif generates
a normal EPSI file first, then dump the current content of the file
into an X11 bitmap file. The command specified in Tgif*XbmToTiff is
executed to generate a TIFF image which is then append at the end of
the EPSI file.
LOCKING OBJECTS
Objects can be locked and unlocked using #< and #> keyboard commands.
When a selected object is locked, it is shown with gray handles.
A locked object can be moved, stretched, flipped, or rotated;
however, its properties, such as fill pattern, width, etc., can
be changed. Locked objects can also be deleted. When a locked
object is grouped with other objects, the resulting grouped object
is also locked. A locked object can be used as an anchor to
align other objects; however, DistributeObjs() command will fail
if any objects are locked. Locked objects do not participate
in any operations in the select vertex mode.
UNDO/REDO
Most operations can be undone and redone. The Tgif*HistoryDepth
X default controls the size of the undo buffer. If it is set
to -1, then the undo buffer's size is infinite. The undo buffer
is flushed when the New() or Open() commands are executed (from
the File Menu), when the FlushUndoBuffer() command is executed
from the Edit Menu, or when Pop() is executed from a .sym file.
If a private colormap is used (automatically done when new colors
can not be allocated from the default colormap), executing FlushUndoBuffer()
will attempt to reset the colormap (if the -DDONT_FREE_COLORMAP
compile option is not used).
DOMAINS
A domain is a collection of library symbols suitable for
instantiations. A library is implemented as a directory of .sym files,
and therefore, a domain is implemented as a search path.
If there are symbols with the same file name which reside
in different directories specified in the search path, then
the one closer to the front of the search path will be made
available for the user to instantiate.
The number of domains is specified by the MaxDomains X default,
and the names of the domains are specified by the DomainPath# X default.
The library search paths are specified by csh environment variables.
See the section on X DEFAULTS for more details.
SELECTING A NAME FROM A POPUP WINDOW
When selecting a file name, a symbol name, or a domain name,
tgif pops up a window with appropriate names for the user to
choose from. The user can use mouse clicks to select an entry.
Key strokes can also be used to specify the desired name; however,
tgif attempts to match the key strokes with names in the selection
on the fly. If a match can not be found, the key strokes are
ignored. ^n, ^j, or the DownArrow key advances the selection
down by 1 entry; ^p, ^k, or the UpArrow key
advances the selection up by 1 entry. ^f, ^d, or the DownArrow
key with <Control> key held down advances the
selection down by 10 entries; ^b, ^u, or the UpArrow
key with <Control> key held down advances the selection up by
10 entries. '$' will select the last entry, while '^' will
select the first entry. ^w or ^y un-select the selected entry.
If the selected entry is a directory, hitting <CR> will change
directory; if not, hitting <CR> finishes the selection process
and the selected entry is returned.
In selecting file names to open or import,
typing '/' is interpreted as going to the root directory or
specifying an URL.
At this point, the automatic matching of key strokes is
temporarily disabled until either a <TAB> or a <CR> is pressed.
Also, clicking the middle mouse button in the file name area
pastes from the clipboard.
The automatic appending of index.obj or .obj (introduced
in version 2.16) is obsoleted and an URL is never modified.
The current selection is displayed near the top of the popup
window. Back-space should be used with caution because it might
change the current directory to the parent directory.
IMPORTING EPS FILES
Encapsulated PostScript (EPS) files can be imported using the #(
keyboard command. If the EPS file has a preview bitmap
(can be generated using the pstoepsi tool), tgif will
display it (HideBit/Pixmap() from the Layout Menu can be used to
disable the displaying of bitmap/pixmaps). When the EPS object
is saved in a .obj or .sym file, neither the preview bitmap, nor
the PostScript content of the EPS file is saved. Therefore,
when printing such a file (either from tgif or using prtgif),
the EPS file must be present at the same place from which it was
originally imported.
ADDITIONAL FONTS
In addition to the Times, Courier, Helvetica, NewCentury, and Symbol fonts,
additional fonts can be specified using the Tgif*AdditionalFonts X default.
(The default screen fonts can also be replaced, please see
Tgif*HasAlternateDefaultFonts in the X DEFAULTS section for more details.)
Each additional font requires 4 parts, one for each font style
(in the order of Roman, Bold, Italic, and BoldItalic).
Each part contains 3 strings. The first string specifies the
family, weight, slant, and width of the font (please see the man pages
for xfontsel(1) for more details; also there is a second form which
is described below). The second string specifies the
registry and encoding of the font (see xfontsel(1) again). (One can use
xlsfonts(1) to see what fonts are available and pick out the just mentioned
two strings from the output.) The third string specifies the PostScript
font name.
For example, if one wants to use the X Lucida font to represent the
PostScript ZapfChancery-MediumItalic font, one can set Tgif*AdditionalFonts
as follows:
Tgif*AdditionalFonts: \n\
lucida-medium-r-normal \n\
iso8859-1 \n\
ZapfChancery-MediumItalic \n\
\n\
lucida-demibold-r-normal \n\
iso8859-1 \n\
ZapfChancery-MediumItalic \n\
\n\
lucida-medium-i-normal \n\
iso8859-1 \n\
ZapfChancery-MediumItalic \n\
\n\
lucida-demibold-i-normal \n\
iso8859-1 \n\
ZapfChancery-MediumItalic
The above maps all four font styles of the Lucida font to the
ZapfChancery-MediumItalic font (similar to how Symbol font is handled).
The first string can also be specified in a second form which is
identified by having "%d" as part of the string. For example, one
can use "lucidasans-%d" as the first string. In this case, the
actual X font used will be the specified string with "%d" replaced by
the font size. The encoding string (second string) is ignored (but
must be present). The font name prefix (please see Tgif*FontNamePrefix
entry in the X DEFAULTS section) is also ignored.
MULTIPAGE DRAWING
An object file can contain multiple pages. Two layout modes,
stacked and tiled, for a multipage drawing are supported.
In stacked layout mode, pages are considered to be stacked on
top of each other, and therefore, an object can only appear on one page.
In tiled layout mode, pages are tiled to form a large logical page;
in this case, an object can exist on several physical pages simultaneously.
Swiching between the two modes are considered rare events and can not be undone.
Tgif does not allow switching from the tiled layout mode to the stacked
mode when there exists an object that spans physical page boundaries because
it can not decide which physical page the object belongs.
Page numbers are supported through the use of page numbering objects. A page
number objecting is an object that contains an attribute whose name is
!PAGE_NUM (the name is case-sensitive) and the name part of that
attribute is not shown (hiding an attribute name can be achieved by using
the Move/JustifyAttr() command under the Special Menu).
The value of the attribute determines how the page number is printed.
If the value of the attribute contains a !(STACKED_PAGE_NUM) substring,
that part of the substring will be replaced by the page number if the
page layout mode is stacked. If the page layout mode is tiled, the string
will be printed out as is. If the value of the attribute contains a
!(TILED_PAGE_ROW) or !(TILED_PAGE_COL) substring, that part of
the substring will be replaced by the row number or the column number of
the physical page if the page layout mode is tiled.
SPECIAL ATTRIBUTES
There are a few special attributes that tgif recognized. There are described
in this section. They are all case-sensitive.
- !PAGE_NUM=<page_number>
-
This specifies the page numbers in a multipage drawing. Please see the
MULTIPAGE DRAWING section for details.
- not_rigid
-
If an attribute's name is empty and the value is not_rigid, then
the object (referred to as the owner object) to which that attribute belongs
is stretchable. By default,
all objects are stretchable, except icon objects; therefore, this attribute
is only useful if the owner object is an icon object.
(Rigid icon objects inside a non-rigid icon object are considered non-rigid.)
- auto_center_attr
-
If an attribute's name is empty and the value is auto_center_attr, then
all the visible attributes of the owner object will automatically be centered
relative to the bounding box of the owner object. It doesn't really make
sense to have multiple visible attributes because they will overlap. This
attribute is useful for making simple flowchart elements.
- unmakeiconic_on_instantiate
-
If an symbol object's attribute has an empty attribute name and
the value is unmakeiconic_on_instantiate,
then when the symbol is instantiated, the following commands are
performed on the just-instantiated icon object: 1) UnMakeIconic() command
from the Special Menu, 2) UnGroup() command from the Arrange Menu, and 3) the
"unmakeiconic_on_instantiate" text object is removed. This attribute is
useful for making simple flowchart segments.
- retracted_arrows
-
If an attribute's name is empty and the value is retracted_arrows
for a polyline or open-spline object with more than 2 vertices,
then the arrows of the spline object is retracted by one vertex.
- auto_retracted_arrows
-
This is very similar to the retracted_arrows above except that the
object must be an interpolated open-spline with only one arrow head.
The spline object is
forced to have 3 vertices and the middle vertex of the spline object
is automatically adjusted when an endpoint is moved.
- auto_exec=<internal
-
If such a file attribute exists, the value is executed when the file
is opened (unless the file is opened as a result of executing the
hyperjump_then_exec() internal command).
EXPORT TO TABLE
When the ExportToTable() command is selected from the Special Menu, certain
attributes of selected objects are written into a user-specified output file
in a format which can be easily imported by a spreadsheet program or to be
used by the MergeWithTable() command described in the next section. An output
file contains columns of strings. Two columns are separated by a single
<TAB> character. The first row of a output file contains the column names
and all other rows contain values.
The names of the attributes to be written are specified by the
file attribute named TABLE_ATTRS (which is denoted by
!.TABLE_ATTRS here). The value of the TABLE_ATTRS
file attribute is a list of comma-separated attribute names. When
ExportToTable() command is executed, the attribute names specified by
!.TABLE_ATTRS are written to the output file first. Then,
for each selected object, every one of its attribute which appears in the
list specified by !.TABLE_ATTRS are written to the output file in one line.
If an object has no attributes that match the specification, no
corresponding line is generated.
MERGE WITH TABLE
When the MergeWithTable() command is selected from the Special Menu, a
selected object is merged (also known as mail-merged on PCs)
with a table (data) file (in the same format as the output file described
in the previous section) to generate a new multipage drawing having the
stacked page layout mode.
The selected object contains formating informat, and it is also used as
a template to be replicated for each
data row in the table file. If an attribute of the replica matches the
column name of the table, the attribute value is set to the value in the
table file. The replicas are tiled horizontally first.
Eight attributes must be specified in the template object. They are all
case-sensitive. The ones that measure distances can be specified in
inches ("in"), centi-meters ("cm"), or pixels (if no units are specified).
-
- PAPER_WIDTH
-
This specifies the width of the paper.
- PAPER_HEIGHT
-
This specifies the height of the paper.
- LEFT_MARGIN
-
This specifies the distance to the left edge of the paper.
- TOP_MARGIN
-
This specifies the distance to the top edge of the paper.
- H_PITCH
-
This specifies the distance between the left edges of the replicas.
- V_PITCH
-
This specifies the distance between the top edges of the replicas.
- NUM_COLS
-
This specifies the number of replicas to tile horizontally before
moving down to the next row.
- NUM_ROWS
-
This specifies the number of replicas to tile vertically before
moving to the next page.
After each replica is generated, filled with the data from the
table file, and placed, its attribute named exec is
executed (unless an attribute named EXEC_AFTER_MERGE is
specified, in which case, the attribute named by the EXEC_AFTER_MERGE
attribute is executed instead). If there is no attribute named by the
EXEC_AFTER_MERGE attribute, nothing is executed.
(Please see the INTERNAL COMMANDS section for details on command execution.)
One can use the exec command to construct other attributes
from the attributes associated with the data table.
If an attribute whose name is empty and whose value is the string
USER_PLACEMENT, the user will be asked to place the replica
(object name will be displayed in the Status Window when the object
is being placed).
In this case, the 8 placement related attributes are ignored.
If an attribute whose name is empty and whose value is the string
STRIP_DOUBLE_QUOTES, data fields surrounded by double-quotes are
stripped.
MIME TYPES AND MAILCAPS
When an URL names an HTTP server, the HTTP server sends the Content-type
of the URL along with the remote file referenced by the URL to tgif.
The Content-type contains information such as the type/subtype of the
file plus some optional fields. If the
file is not a tgif file, the following mechanism is used to view the file.
First, the X defaults are looked up to see if there is an external
viewer specified for the file. Please see Tgif*@@@Viewer in the X DEFAULTS
section below for details. If there's no match, the type/subtype is
matched against entries in the MIME-types file.
The default MIME-types file is .mime.types in user's home directory.
Please see Tgif*MimeTypesFile in the X DEFAULTS section on how to override
the default MIME-types file. The first field in each line of the MIME-types
file specifies type/subtype information.
If there is a type/subtype match in the MIME-types files,
the MailCap files are consulted as follows.
A line in a MailCap file consists of fields separated by semi-colons.
The first field specifies the type/subtype and the second field specifies
a view command for viewing a file that matches the type/subtype.
For tgif, the view command must contains a single %s substring
to be replaced by local copy of the URL. Only the %t and the %{}
optional fields are supported by tgif. The multipart MIME-type is
not supported. The type/subtype information of the remote file is matches
against the MailCap files. If a match is found, the corresponding view command
is executed. If no match is found, but the type of the remote file is either
application, audio, image, or video, the file is
saved and no external viewer is launched. Otherwise, the remote file is
assumed to be pure text and tgif will create a text object to view the text.
The MailCap files are the (colon-separated) files specified by the
MAILCAP environment variable (if defined).
If MAILCAP is not defined, the .mailcap file in
the user's home directory is used.
MIME is the Multipurpose Internet Mail Extensions specified in RFC1521,
and MAILCAP is specified in RFC1524.
HOW TO MAKE A BUILDING-BLOCK OBJECT (SYMBOL FILE)
Here are the steps for defining a building-block object, to be used
in a hierarchical design.
- 1)
-
Draw the representation part of the building-block object. Group everything
together. Select this grouped object.
- 2)
-
Popup the main menu with the middle mouse button; select ``Special''.
Select ``MakeSymbolic'' from the next popup menu.
The selected object becomes a symbol and gets a dashed boundary.
- 3)
-
Type in attributes as individual text strings. Select the
symbol object and all the
text strings to be attached to the symbol. Type #a (for Attach)
to attach attributes to the symbol.
- 4)
-
(This step is optional.) Build
the definition part of the building-block object. Look at the
``flip-flop.sym'' file for an example. To look at that file, first,
instantiate a ``flip-flop'' by typing ^i (for Instantiate).
Select the flip-flop from
the popup window; place the flip-flop; select the flip-flop and
type ^v (for Push) to see the symbol file.
- 5)
-
Save and name the file. If the current library path contains the
current directory (or '.'), the symbol just built should be
instantiatable by typing ^i.
X11 PIXMAP (XPM) FORMATS
Tgif can only import X11 pixmaps that satisfy the constraints
described here. The format of the X11 pixmap must be either 1 (XPM1)
or 3 (XPM3). Only a subset of the XPM3 format is supported, namely,
the key field for the color specification must be 'c' (for
color visuals).
Tools that generate XPM1 format files are
(they might have been upgraded to support XPM3), pbmplus, which is
a set of bitmap and pixmap conversion freeware (together with
xv, the colors for pixmap objects can be manipulated),
and xgrabsc, another freeware; also, xloadimage
can display XPM1 files.
Tools that can generate XPM3 format files are, for example,
xsnap and sxpm.
For each color specified in the color string, a color cell
is allocated. If the allocation fails,
the current color will be used for that color string.
If the first color character is a back-quote (`) or a space, then
the corresponding color is substituted with the background
color of the tgif window if the Tgif*GuessXPmBgColor X default is
set to ``true''. (This design choice is made because the pixmap will then
look ``right'' on both regular and reverse video.)
The following is an example of a very small pixmap file (in XPM1
format).
-
#define arrow_format 1
#define arrow_width 5
#define arrow_height 3
#define arrow_ncolors 3
#define arrow_chars_per_pixel 1
static char *arrow_colors[] = {
"`", "Black",
"a", "red",
"b", "yellow"
};
static char *arrow_pixels[] = {
"`a```",
"aabbb",
"`a```"
};
LATEX FIGURE FORMATS
Here we show how to make a figure for a LaTeX file, first with
the \psfig (or \epsf) special construct, then with the
psfile special construct. (The author does not recommend
the psfile construct.) An example of both can be found
in ``example.tex'' which is included with the tgif distribution.
To print a tgif file to be included in a LaTeX document with
the \psfig or \epsf special construct
(files generated will be in the
Encapsulated PostScript format), first
select LaTeX format in the panel window (click the left mouse
button on the laser printer icon), then type ^p to generate
the Encapsulated PostScript file.
If the file name is ``an-sr-flip-flop.obj'',
then the LaTeX figure file generated will be named
``an-sr-flip-flop.eps''. This file can be included in a LaTeX
document as follows,
-
\input{psfig}
\begin{figure*}[htb]
\centerline{\psfig{figure=an-sr-flip-flop.eps}}
\caption{An SR flip-flop. \label{fig:an-sr-flip-flop}}
\end{figure*}
An alternative way is to use the \epsf construct as follows,
-
\input{epsf}
\begin{figure*}[htb]
\centerline{\epsffile{an-sr-flip-flop.eps}}
\caption{An SR flip-flop. \label{fig:an-sr-flip-flop}}
\end{figure*}
The \centerline command above centers the picture.
If one has multiple tgif figures in one's LaTeX document,
one only have to include the psfig macro (\input{psfig} or \input{epsf})
once, right after the \begin{document} statement.
If Encapsulated PostScript is not available, the psfile
special construct can be used as described here.
In this case, since LaTeX doesn't not know where the bounding
box of the drawing is, it takes some practice to get this just right.
Here is something that seems to work.
First, center the picture
on the page (e.g., the width of a portrait style page is 8.5 inch, so the
center of the page is at the 4.25 inch mark),
and make the top object in the picture about 1/4 inch away from
the top of the page.
Select the LaTeX format in the panel window,
then print in the LaTeX format.
As with the psfig construct, a file with the .eps
extension will be generated.
This file can be included in a LaTeX document as follows,
-
\begin{figure*}[htb]
\special{psfile="an-sr-flip-flop.eps" hoffset=-40}
\rule{0in}{1.1in}
\caption{An SR flip-flop. \label{fig:an-sr-flip-flop}}
\end{figure*}
The \rule{0in}{1.1in} above specifies an invisible box of 1.1 inches
high, which is the total height of the picture in an-sr-flip-flop.
X DEFAULTS
- Tgif*Geometry: WIDTHxHEIGHT+X+Y
-
- Tgif*IconGeometry: +X+Y
-
- Tgif*Foreground: COLORSTRING
-
The default foreground color is Black.
- Tgif*Background: COLORSTRING
-
The default background color is White.
- Tgif*BorderColor: COLORSTRING
-
If not specified, the foreground color will be used.
- Tgif*ReverseVideo: [on,off]
-
For black and white terminal, reverse video ``on'' means the background
is black. For color terminal, reverse video ``on'' means the background
is specified by the Tgif*Foreground color.
The default is off.
- Tgif*InitialFont: [Times,Courier,Helvetica,NewCentury,Symbol]
-
This specifies the initial font.
The default is Courier.
- Tgif*InitialFontStyle: [Roman,Bold,Italic,BoldItalic]
-
This specifies the initial font style.
The default is Roman.
- Tgif*InitialFontJust: [Left,Center,Right]
-
This specifies the initial font justification.
The default is Left.
- Tgif*InitialFontDPI: [75,100]
-
Obsoleted.
- Tgif*InitialFontSizeIndex: [0,1,2,3,4,5]
-
Obsoleted.
- Tgif*InitialFontSize: NUMBER
-
This specifies the size of the start-up font. The default is 17.
- Tgif*MsgFontSizeIndex: [0,1,2,3,4,5]
-
Obsoleted.
- Tgif*MsgFontSize: NUMBER
-
This specifies the size of the font used for messages, menues,
and popup windows. The default is 17.
- Tgif*RulerFontSize: NUMBER
-
This specifies the size of the font used for ruler windows.
The default is 10.
- Tgif*DefaultFontSize: NUMBER
-
This specifies the size of the font to be used when a requested for a font size
can not satisfied. This size must exist for all fonts used in
tgif. The default is 14.
- Tgif*FontSizes: NUMBER1 NUMBER2, ...
-
This specified the font sizes.
The default is 8 10 11 12 14 17 18 20 24 25 34.
- Tgif*AdditionalFonts: FONT_SPEC1 FONT_SPEC2 ...
-
In addition to the Times, Courier, Helvetica, NewCentury, and Symbol fonts,
additional fonts can be specified here. Please see the ADDITIONAL FONTS
section for details.
- Tgif*FontNamePrefix: [-*, *]
-
This specified the prefix to be used when tgif makes a request to the X server.
The default is -*. Certain fonts have obscure font names (e.g., does
not start with the - character). In order to use these fonts, this
X default can be set to *.
- Tgif*HasAlternateDefaultFonts: [true,false]
-
The default value of this X default is false.
If it set to ``false'', tgif uses the iso8859 registry
with ASN1 encoded screen fonts,
and it look for "times", "courier", "helvetica", "new century schoolbook",
and "symbol" as part of the screen font names. Some X servers do not support
these fonts. In this case, this X default can be used to make tgif use
user specified fonts. (Please note that the PostScript output will not be
affected.) If this X default is set to ``true'', tgif will look for additional
X defaults of the form Tgif*<ps_font_name>, where <ps_font_name>
can be one of the following strings:
-
-
Times-Roman
Times-Bold
Times-Italic
Times-BoldItalic
Courier-Roman
Courier-Bold
Courier-Oblique
Courier-BoldOblique
Helvetica-Roman
Helvetica-Bold
Helvetica-Oblique
Helvetica-BoldOblique
NewCenturySchlbk-Roman
NewCenturySchlbk-Bold
NewCenturySchlbk-Italic
NewCenturySchlbk-BoldItalic
Symbol
-
The corresponding value of the X default must contain "%d" as part of
the string, and the "%d" string will be replaced by the font size when
the font is requested. For example, The following lines will use the
Times New Roman screen font instead of the Times screen font, if
Tgif*HasAlternateDefaultFonts is ``true'':
-
Tgif*Times-Roman: *-times new roman-medium-r-*--%d-*
Tgif*Times-Bold: *-times new roman-bold-r-*--%d-*
Tgif*Times-Italic: *-times new roman-medium-i-*--%d-*
Tgif*Times-BoldItalic: *-times new roman-bold-i-*--%d-*
-
Please note that certain X servers require the right-hand-side
font specifications to have all the dashes in place.
- Tgif*DefaultCursor: [x_cursor,arrow,...]
-
This specifies the select cursor. Entries in <X11/cursorfont.h>
(without the XC_ prefix) are valid names of the cursor.
The default is arrow.
- Tgif*DrawCursor: [x_cursor,arrow,...]
-
This specifies the cursor used when drawing objects.
Entries in <X11/cursorfont.h>
(without the XC_ prefix) are valid names of the cursor.
The default is the same as Tgif*DefaultCursor.
- Tgif*DragCursor: [x_cursor,arrow,...]
-
This specifies the cursor used when dragging.
Entries in <X11/cursorfont.h>
(without the XC_ prefix) are valid names of the cursor.
The default is hand2.
- Tgif*VertexCursor: [x_cursor,arrow,...]
-
This specifies the cursor used in the select vertices mode.
Entries in <X11/cursorfont.h>
(without the XC_ prefix) are valid names of the cursor.
The default is plus.
- Tgif*RubberBandColor: COLORSTRING
-
This specifies color used for rubber-banding (XORing).
The default color is the same as the foreground color.
- Tgif*PrintCommand: COMMAND
-
This specifies the print command used for printing the PostScript file.
The default is lpr. An example would be
lpr -h -Pprintername.
If COMMAND contains a %s substring, the %s will be replaced
by the full path name of the PostScript file which is normally send to
the print command. Therefore, COMMAND without a %s substring behaves
identically to COMMAND %s. Please note that this only works
when running tgif without the -print command line option.
This can be used to send a font
file to the printer before the tgif PostScript file is sent as in the
following example:
-
-
cat /somewhere/sansfex.pfa %s | lpr -Pmyprinter
- Tgif*WhereToPrint: [Printer,EPS,PS,Bitmap,Text,EPSI,GIF]
-
This specifies the initial print destination/format.
The default is EPS.
- Tgif*PrintDirectory: PATH
-
This specifies the print directory when the output destination
is not the printer.
The default is a null string, which means that the output goes
into the directory in which the current file resides.
- Tgif*NoTgifIcon: [true,false]
-
If set to ``true'', tgif will not use its own icon window. In this case,
one should also set Tgif*UseWMIconPixmap described below to true.
The default is false.
- Tgif*UseWMIconPixmap: [true,false]
-
If set to ``true'', tgif will use the standard icon pixmap. Also,
Tgif*NoTgifIcon will be forced to be true.
The default is false.
- Tgif*DontShowVersion: [true,false]
-
If set to ``true'', the tgif version will not be displayed on top of the
tgif window.
The default is false.
- Tgif*XBmReverseVideo: [true,false]
-
If set to ``true'', an invert bitmap operation will be performed
when importing an X Bitmap file.
The default is false.
- Tgif*AskForXBmSpec: [true,false]
-
If set to ``true'', the user will be asked to specify
magnification and geometry for an X Bitmap file being imported.
Format of the specification is MAG=WxH+X+Y, where
MAG is the magnification, W and H specifies the width and height,
and the location specification can be +X+Y, +X-Y, -X+Y, and -X-Y.
The '=' is mandatory if any of the geometry information is
specified.
The default is false.
- Tgif*AskForXPmSpec: [true,false]
-
If set to ``true'', the user will be asked to specify
magnification and geometry for an X Pixmap file being imported.
The format of the specification is the same as for AskForXBmSpec.
The default is false.
- Tgif*StripEPSComments: [true,false]
-
If set to ``true'', lines that start with '%' in an Encapsulated
PostScript file will be stripped when the file is imported (except
the first line of the file).
The default is true.
- Tgif*GuessXPmBgColor: [true,false]
-
If set to ``true'', then when tgif imports an X Pixmap file
with the first color string being ' ' (the space character) or '`'
(the back quote character), it will treat the first color
as a background color. This means that
the specified color in the X Pixmap file will be changed to
the current background color.
The default is false. (Please note that this default was true
before patch 2 of tgif-2.7. This X default is there for compatibility
reasons; it should be considered obsolete.)
- Tgif*XPmOutputVersion: NUMBER
-
This specifies the XPM version number when outputting in the X11 pixmap
format. NUMBER can take on values 1 or 3. The default is 1.
- Tgif*XPmInXGrabSCFormat: [true,false]
-
If Tgif*XpmOutputVersion is set to 1, setting this to ``true'' will
force the X11 pixmap output to resemble what xgrabsc generates.
The default is false.
- Tgif*UseGrayScale: [true,false]
-
If set to ``true'', gray scales will be used for tiling patterns
to speed up printing.
The default is false.
- Tgif*AutoPanInEditText: [true,false]
-
If set to ``true'', auto panning will be used such that the text cursor
is always visible in text edit mode (except when the cursor is to the
left or on top of the paper).
This should probably be turned off on slow servers.
The default is true.
- Tgif*PercentPrintReduction: NUMBER
-
The specifies the initial percent print reduction/magnification.
The default is 100.
- Tgif*ConstrainedMove: [true,false]
-
This specifies the initial move mode.
When set to ``true'', moving or stretching an object will cause the
endpoints of all
polylines or open-splines, whose endpoints fall within the object,
and may be the neighboring vertices, to be moved. Please see the
IDIOSYNCRASIES section for more details.
The default value is false.
- Tgif*DoubleQuoteDoubleQuote: [true,false]
-
When set to ``true'', output of the double-quote character will be preceded
by a double-quote character; when set to false, output of the double-quote
character will be preceded by a back-slash character.
The default value is false.
- Tgif*GridSystem: [English,Metric]
-
This sets the initial grid system. The default is English.
- Tgif*InitialGrid: NUMBER
-
This specifies the initial grid size.
For the English grid system, NUMBER can be -2, -1, 0, +1, or +2 for grid
sizes of 1/32, 1/16, 1/8, 1/4, and 1/2 inch.
For the Metric grid system, NUMBER can be -1, 0, +1, or +2 for grid
sizes of 1mm, 2mm, 5mm, and 1cm.
The default value is 0.
- Tgif*DropObsIconAttrWhenUpdate: [true,false]
-
If set to ``true'', obsolete icon attributes will be dropped without
confirmation when the UpdateSymbols command is executed. If set to ``false'',
a popup window will prompt the user to specify what to do
with the obsoleted icon attributes.
The default is false.
- Tgif*UseRecentDupDistance: [true,false]
-
If set to ``true'', the most recent change in position produced by a combination
of a duplicate and a move command will be used for the new duplicate command.
Otherwise, some default distance will be used to position the duplicate.
The default is true.
- Tgif*SplineTolerance: NUMBER
-
This specifies the tolerance of spline drawing.
The smaller the number, the smoother the spline.
The default is 9 (min is 3 and max is 13).
- Tgif*SplineRubberband: [true,false]
-
If set to ``true'', spline rubber-bands will be used
in drawing, moving, and stretching open and closed splines.
(This might not be desirable if the spline contains too many vertices.)
The default is true.
- Tgif*Synchronize: [on,off]
-
XSynchronize is called if this default is set to ``on''. The default is off.
- Tgif*DoubleClickUnIconify: [true,false]
-
If set to ``true'', double mouse clicks are used to de-iconify
the icon window (in this mode, the icon window ignores single
mouse clicks and drags).
The default is false.
- Tgif*MainMenuPinDistance: NUMBER
-
This specifies the horizontal distance (in pixels) the user needs to
drag a popup menu before the popup menu is to be pinned down.
The default is 80. (If pinned popup menus are not desired, then this should
be set to a value greater than the screen width.)
Dragging the left mouse button can be used to move the pinned popup menu;
clicking the right button in the popup menu will remove it.
- Tgif*DoubleClickInterval: NUMBER
-
This specifies the maximum interval (in milliseconds)
between two mouse clicked to be recognized as one double-click.
The default is 300.
- Tgif*HandleSize: NUMBER
-
This specifies (half) the size of the handle used to highlight objects.
Its allowable value is between 2 and 6.
The default is 3.
- Tgif*HistoryDepth: NUMBER
-
This specifies the size of the undo/redo buffer; negative values
mean that the buffer is unbounded.
The default is -1.
- Tgif*SaveTmpOnReturn: [true,false]
-
If set to ``true'', a tmpmodel file will be saved automatically before
returning to the driver. Otherwise, no files will be
saved automatically.
The default is true.
- Tgif*ImportFromLibrary: [true,false]
-
If set to ``true'', the library directories specified by the
current domain are searched for .obj, .sym, xbitmap/xpixmap, and EPS files to
import. Otherwise, the current directory will be used as the starting point.
The default is false.
- Tgif*WarpToWinCenter: [true,false]
-
If set to ``true'', the mouse is warped to the center of popup
windows. Otherwise, the mouse is not warped.
The default is true.
- Tgif*SaveCommentsInSaveNew: [true,false]
-
If set to ``true'', "%%" type comments in the file will be stored in the
newly created file.
The default is true.
- Tgif*CanvasWindowOnly: [true,false]
-
If set to ``true'', only the canvas window will be displayed (this is
kind of the ``demo'' mode).
The default is false.
- Tgif*UsePsAdobeString: [true,false,NUMBER_1/NUMBER_2]
-
If set to ``true'', the first line in the PS or EPS file will be
"%!PS-Adobe-2.0 EPSF-1.2". If set to ``false'', it is just "%!".
If the third form is used,, the first line will be
"%!PS-Adobe-NUMBER_1 EPSF-NUMBER_2".
The default is false. The PS-Adobe string might confuse Transcript,
but it is needed to work with groff.
- Tgif*HalfToneBitmap: [true,false]
-
If set to ``true'', the Floyd-Steinberg half-tone method will be used
when printing in X11 bitmap format. This is useful when the drawing
contains X11 pixmap objects.
The default is false.
- Tgif*ThresholdBitmap: [true,false]
-
If set to ``true'', a simple thresholding method will be used to decide whether
a bit is turned on or off when printing in X11 bitmap format.
If Tgif*HalfToneBitmap is set to true, this X default is ignored.
The default is false.
- Tgif*BitmapThreshold: NUMBER
-
This specifies the threshold value used in either the Floyd-Steinberg half-tone
algorithm or the simple thresholding algorithm. NUMBER must be between 0 and 1.
This X default is only active
when either the Tgif*HalfToneBitmap or the Tgif*ThresholdBitmap
X default is set to true.
The default value is 0.5 if Tgif*HalfToneBitmap is true, and is 1.0
if Tgif*ThresholdBitmap is true
(basically, anything that is not white will be black).
- Tgif*GroupedTextEditable: [true,false]
-
If set to ``false'', only top level text objects and attributes of top
level objects can be edited when the drawing mode is set to the text mode.
If set to ``true'', text objects and attributes everywhere can be edited.
The default is false.
- Tgif*DefaultEPSScaling: NUMBER
-
This specifies the scaling factor applied to an imported PS or EPS image.
As mentioned in the IDIOSYNCRASIES section below, tgif treats 128 pixels
as an inch and PostScript treats 72 points as an inch. In order to have
real-size PostScript images, this parameter should be set to 1.7778
(which is 128/72).
The default value is 1.
- Tgif*IntrCheckInterval: NUMBER
-
This specifies the number of objects drawn before tgif checks for
interrupts. If this is set to be 0 or less, interrupt is not allowed.
The default value is 10.
- Tgif*TiledPageScaling: NUMBER
-
This specifies the scaling value used when a multipage drawing in
tiled page mode is printed. Since most PostScript printers do not
use the full page as the drawing area, setting this number to 1
may get truncated output.
The default value is 0.9.
- Tgif*TGIFPATH: STRING
-
This specifies the directory where the files, mentioned in the FILES
section below, can be found. The TGIFPATH environment variable may
override this option.
The default value is specified by the compiler option TGIF_PATH.
- Tgif*TGIFICON: STRING
-
This specifies the name of the object file to be displayed when tgif
is iconified. If it starts with a / character, absolute path is used;
otherwise, the actual path of the icon file is $TGIFPATH/STRING where
TGIFPATH is either defined using the X defaults or an environment variable.
The default value is ``tgificon.obj''.
- Tgif*MaxColors: NUMBER
-
This specifies the maximum number of colors. Color0 through ColorMax,
where Max is NUMBER-1, in X defaults are queried. If NUMBER is greater
than the default of 11, Color11 through ColorMax must all exist
in X defaults. Please see the GRAPHICAL OBJECTS section for a list of
the default colors.
- Tgif*Color#: COLORSTRING
-
This specifies the correspondence between a color number and a color.
- Tgif*DefaultColorIndex: NUMBER
-
This specifies the default color index if a certain color can not be found.
The default is 0.
- Tgif*ShortCuts: ITEM1 ITEM2 ...
-
The ITEM specifies the correspondence between a key (may be case
sensitive) and a non-alphanumeric key command. Please see
the SHORTCUTS section for details.
- Tgif*MaxLineWidths: NUMBER
-
This specifies the maximum number of line widths. LineWidth0 through
LineWidthMax, ArrowWidth0 through ArrowWidthMax, and ArrowHeight0
through ArrowHeightMax, where Max is NUMBER-1, in X defaults are
queried. If NUMBER is greater than the default value of 7,
LineWidth7 through LineWidthMax, ArrowWidth7 through ArrowWidthMax,
and ArrowHeight7 through ArrowHeightMax
must all exist in X defaults.
Some default values will be used for those that are
not specified in the X defaults.
- Tgif*DefaultLineWidth: NUMBER
-
This specifies the initial line width index.
The default is 0.
- Tgif*LineWidth#: NUMBER
-
This specifies a line width.
The default line widths are 1, 2, 3, 4, 5, 6, and 7.
- Tgif*ArrowWidth#: NUMBER
-
This specifies the width (when the arrow is pointing horizontally)
of the arrow head for arc and open-spline objects.
The default arrow widths are 8, 10, 12, 14, 18, 20, and 22.
- Tgif*ArrowHeight#: NUMBER
-
This specifies half the height (when the arrow is also pointing
horizontally) of the arrow head for arc and open-spline objects.
The default arrow heights are 3, 4, 5, 6, 7, 8, and 9.
- Tgif*MaxDomains: NUMBER
-
This specifies the maximum number of domains. DomainPath0 through
DomainPathMax, where Max is NUMBER-1, all must exist in X defaults.
- Tgif*DomainPath#: DOMAINSTRING
-
This specifies the correspondence between a domain number, a domain name,
and the path associated with a domain. DOMAINSTRING contains strings which are
separated by the ':' symbol. The first string is the name of the domain.
Each of the rest of the strings specifies a directory where symbol files are to
be searched when the Instantiate command is executed (please see the
HOW TO MAKE A BUILDING-BLOCK OBJECT section for details). Another way to
look at the DOMAINSTRING specification is that removing the first
string (which specifies the domain name) and the first ':' symbol, a
DOMAINSTRING has the form of the PATH csh(1) environment variable.
For example, to specify the symbol path for domain DEFAULT
to look for symbol files, first in the library directory /tmp/tgif/symbols,
then in the current directory,
DOMAINSTRING should be set to the following value:
-
-
DEFAULT:/tmp/tgif/symbols:.
- Tgif*DefaultDomain: NUMBER
-
This specifies the default domain when tgif starts up.
The default is 0.
- Tgif*StickyMenuSelection: [true,false]
-
If set to ``true'', when patterns/linewidths/linestyles/... of objects are
changed using a menu action, the corresponding
pattern/linewidth/linestyle/... becomes the current selection.
The default is false.
- Tgif*PSBopHook: STRING
-
If specified, the following PostScript line is added at the beginning of
each page when printing to the printer or to a PS file,
-
-
userdict /STRING known { STRING } if
-
This option should only be used if one is very familiar with PostScript.
(Setting STRING to "tgif-bop-hook" is recommanded since it would not have
a name conflict with existing software, such as dvips(1).)
- Tgif*PSEopHook: STRING
-
If specified, the following PostScript line is added at the end of
each page when printing to the printer or to a PS file,
-
-
userdict /STRING known { STRING } if
-
This option should only be used if one is very familiar with PostScript.
(Setting STRING to "tgif-eop-hook" is recommanded since it would not have
a name conflict with existing software, such as dvips(1).)
- Tgif*ShowMeasurement: [true,false]
-
If set to 'true', the location of the cursor and the width and height
of the object begin drawn/dragged/stretched will be shown.
The default is false.
- Tgif*MinimalEPS: [true,false]
-
If set to 'false', comments such as %%Pages, %%DocumentFonts, %%EndComments,
%%BeginProlog, %%EndProlog, %%Page, %%Trailer, and %%EOF will be generated
in an EPS output. These comments may confuse certain ``document managers''.
Therefore, the default is true.
- Tgif*InitialPrintInColor: [true,false]
-
If set to 'true', color output (printing) mode is enabled on startup.
The default is false.
- Tgif*InitialShowGrid: [true,false]
-
If set to 'false', showing grid is disabled on startup.
The default is true.
- Tgif*InitialSnapOn: [true,false]
-
If set to 'false', snapping to the grid points is disabled on startup.
The default is true.
- Tgif*NoMenubar: [true,false]
-
If set to 'true', no menubar will be shown initially.
The default is false.
- Tgif*NoStatusWindow: [true,false]
-
If set to 'true', no status window will be shown initially.
The default is false.
- Tgif*ReverseMouseStatusButtons: [true,false]
-
If set to 'true', the left mouse status and the right mouse status are
swapped. This should be used when a ``left-handed mouse'' is used.
The default is false.
- Tgif*MinimalMenubar: [true,false]
-
If set to 'false', the menu items in the Menubar Window will be the
same as the main popup menu. This would take up much more space.
If set to 'true', the Page, PageLayout, HoriAlign, VertAlign, and MoveMode
menus are collapsed into the View cascading menu; the Font, TextStyle, and
TextSize menus are collapsed into the Text cascading menu; and the LineDash,
LineStyle, LineType, LineWidth, Fill, and Pen menus are collapsed into the
Graphics cascading menu.
The default is true.
- Tgif*ColorBgInPrintingColorPS: [true,false]
-
If set to 'true', the window background color is used as the background
color when generating color PostScript output. If set to 'false',
no background color is used.
The default is false.
- Tgif*ScrollBarWidth: NUMBER
-
This specifies the width of a scroll bar.
NUMBER must be between 2 and 16. The default is 16.
- Tgif*InitialPaperSize: STRING
-
The STRING specifies the initial width and height of the paper.
STRING is in the "<width> x <height>" form. <width> and <height> is a
numeric value immediately followed by either "in" (inch) or "cm" (centi-meter).
The " x " that separate the <width> and <height> is mandatory.
If A4PAPER is defined in the Makefile, the default value is "21cm x 29.7cm".
If A4PAPER is not defined in the Makefile, the default value is "8.5in x 11in".
- Tgif*UpdateChildUsingAlignment: [true,false,no_overlap]
-
If set to 'true' or 'no_overlap', when update_eps_child(), update_xbm_child(),
or update_xpm_child() internal command is executed, the current
horizontal and vertical alignments are used to place the EPS/XBM/XPM
subobject. If the horizontal alignment is L, C, R, S, or -, the subobject
is aligned to the left, center, right, center, or left, respectively,
to the parent object.
If the vertical alignment is T, M, B, S, or -,
the subobject is placed above, middle, below, middle, or below the
parent object if this X default is set to 'no_overlap'; the
subobject is aligned to the top, middle, bottom, middle, or below the
parent object if this X default is set to 'true'.
If this X default is set to 'false', the subobject
is placed left aligned and below the parent object.
The default is false.
- Tgif*GenerateImageMap: [true,false]
-
If set to 'true', NCSA imagemap or CERN Clickable Image
files will be generated when print in GIF format. In this case,
Tgif*XpmToGif, Tgif*ImageMapFileExtension, Tgif*GifFileExtension,
Tgif*ImageMapFileFormat, and Tgif*UseXPmVersion1ForImageMap X defaults,
described below, will be interpreted; otherwise, they are ignored.
Please see the section on
GENERATING NCSA IMAGEMAP AND CERN CLICKABLE IMAGE FILES for details.
The default is false.
- Tgif*XpmToGif: STRING
-
The STRING specifies a command used to convert an XPM file to a GIF file.
The STRING must contain a %s substring to be replaced by the
full path name of the XPM file.
The default is "xpmtoppm %s | ppmtogif".
- Tgif*ImageMapFileExtension: STRING
-
The STRING specifies the file extension for a imagemap file.
The default is "map".
- Tgif*GifFileExtension: STRING
-
The STRING specifies the file extension for a gif file.
The default is "gif" (lower case).
- Tgif*ImageMapFileFormat: [NCSA,CERN]
-
The STRING specifies either the NCSA imagemap or the CERN clickable image
format.
The default is NCSA for the NCSA imagemap format.
- Tgif*UseXPmVersion1ForImageMap: [true,false]
-
The setting of this X default should depend on the setting of the
Tgif*XpmToGif X default above.
If set to 'true', XPM1 file is generated disregarding the setting of the
Tgif*XPmOutputVersion X default.
The default is true.
- Tgif*UsePaperSizeStoredInFile: [true,false]
-
If set to ``true'', the paper size information stored in a just opened file
is used.
The default is false.
- Tgif*OneMotionSelMove: [true,false]
-
If set to ``true'', one can select and move an object in one motion.
The default is false.
- Tgif*TiffEPSI: [true,false]
-
If set to ``true'', a TIFF image will be appended to a generated EPSI file.
Please see the GENERATING EPSI FILE FOR SOME MICROSOFT WINDOWS APPLICATIONS
section for details.
The default is false.
- Tgif*XbmToTiff: STRING
-
The STRING specifies a command used to convert an XBM file to a TIFF file.
The STRING must contain either one of two %s substring. The
first %s substring is to be replaced by the full path name of the
XBM file. The optional second %s substring is to be replaced by
the full path name of the generated TIFF image.
The default is "xbmtopbm %s | pnmtotiff -none > %s".
- Tgif*EPSIExportExtension: STRING
-
STRING specifies the file extension used for exporting EPSI files.
The default is "eps".
- Tgif*HotListFileName: STRING
-
STRING specifies a full path name of a file used to store the hot file list.
By default, this file is .Tgif_hotlist in the user's home directory.
- Tgif*@@@Viewer: STRING
-
STRING specifies an external viewer for an remote URL with a file
extension of @@@. STRING can be in 3 forms. It can be the string "NONE"
to indicate that when such a remote file is encountered, tgif should retrieve
the file into a user specified directory. For example, if one wishes to
retrieve .gz files, one can use:
-
-
Tgif*gzViewer: NONE
-
STRING can also contain the string %S (S is capitalized), this indicates
that %S is to be replaced by the URL. For example, if one wishes to
view .html files using xmosaic, one can use:
-
-
Tgif*htmlViewer: xmosaic %S
-
Another form of STRING contains the string %s (S is lower-case),
this indicates that the remote file is
to be retrieved into a user specified directory
and view by a tool. For example, if one wishes to
view .gif files using xv, one can use:
-
-
Tgif*gifViewer: xv %s
-
Please note that this mechanism has precedence over the mechanism described
in the MIME TYPES AND MAILCAPS section above.
- Tgif*AutoHyperSpaceOnRemote: [true,false]
-
If set to ``false'', tgif will not go into the hyperspace mode
when a remote URL is visited.
The default is true.
- Tgif*AllowLaunchInHyperSpace: [true,false]
-
If set to ``true'', launching of applications is enabled in the
hyperspace mode when a remote URL is visited. This is
potentially very dangerous because the application may do
catastrophic damages. Therefore, it is strongly recommanded that it is
set to false.
The default is false.
- Tgif*CanChangeAttrColor: [true,false]
-
If set to ``true'', color of an attribute can be changed when it is
attached to an object.
The default is false.
- Tgif*MimeTypesFile: STRING
-
STRING specifies a full path name of the MIME-types file. Tgif only
uses the type/subtype field in the MIME-types file and ignores all other
fields.
The default MIME-types file is .mime.types in user's home directory.
- Tgif*LocalRGBTxt: STRING
-
If one would like to override certain system colors, one can use STRING
to specify a full path name of a file to be consulted first before
looking up the color in the server. The file must be in the same format
as the rgb.txt file. Namely, each line contains 4 fields, the
first 3 fields correspond to the red, green, and blue components of the
color, and the 4th field is the name of the color. A color component
must have a value between 0 and 255 (inclusive).
- Tgif*PrintUsingRequestedColor: [true,false]
-
If set to ``true'', the color PostScript file being printed will use the
requested color instead of the color returned by the X server.
The default is false.
- Tgif*ShowMeasurementUnit: [pixel,inch,cm]
-
The STRING specifies the unit used to display the measurement cursor.
The default is pixel.
- Tgif*PageStyleLandscape: [true,false]
-
If set to ``true'', tgif comes up in landscape mode.
The default is false.
- Tgif*QueryZoomInPoint: [true,false] or [always,no_select,no_query,never]
-
If set to ``true'' (or ``always''), the user will be asked to select a
center point when zooming in. If set to ``no_select'', the user will
be asked to select a center point when zooming in if no objects are
selected. If set to ``no_query'', the position of the mouse is the zoom-in
point. In this case, it is not desirable to zooms in using a menu selection.
The default is false (or never).
- Tgif*GUnZipCmd: STRING
-
The STRING specifies a command used to unzip a zipped remote tgif file
(with extension .obj.gz or .sym.gz) into a tgif file. The command must
produce output into its stdout. If the command contains a %s
substring, the %s will be replace by the full path name of a
temporary copy of the zipped file.
The default is "gunzip -c".
- Tgif*HttpProxy: STRING
-
The STRING specifies a host name and a port number of a HTTP proxy server.
Format of the specification is <host>:<port>. If :<port> is
omitted, 80 is used as the default port number. The environment variable
http_proxy has precedence over this X default.
The default is not to use a HTTP proxy server.
- Tgif*FtpProxy: STRING
-
The STRING specifies a host name and a port number of a FTP proxy server.
Format of the specification is <host>:<port>. If :<port> is
omitted, 21 is used as the default port number. The environment variable
ftp_proxy has precedence over this X default.
The default is not to use a FTP proxy server.
- Tgif*InitialArrowStyle: [NONE,RIGHT,LEFT,DOUBLE]
-
This specifies the initial arrow style for polyline/open-splines/arcs.
The default is RIGHT.
- Tgif*ShowPageInEPS: [true,false]
-
If set to ``true'', a showpage PostScript command will be generated
for an EPS or EPSI file.
The default is false.
- Tgif*MaxNavigateCacheBuffers: NUMBER
-
This specifies the number of cache buffers allocated to cache remote files
(to minimize communication).
NUMBER must be non-negative. The default is 40.
- Tgif*NumberFileInPrintOnePage: [true,false]
-
If set to ``true'', when PrintOnePage from the Print Menu
is selected for a stacked multipage drawing (e.g., file.obj), file_N
with the proper file extension will be generated, where N corresponds
to the selected page number.
The default is false.
- Tgif*OneMotionTimeout: NUMBER
-
When Tgif*OneMotionSelMove is set to true, moving an object is considered to
be making a selection if the elapse time between mouse-down and mouse-up is
smaller than the timeout value specified by this X default (in milliseconds).
The default is 200.
- Tgif*MinMoveInterval: NUMBER
-
When Tgif*OneMotionSelMove is set to false, moving an object is considered to
be making a selection if the elapse time between mouse-down and mouse-up is
smaller than the interval specified by this X default (in milliseconds).
The default is 0.
- Tgif*GifToXpm: STRING
-
The STRING specifies a command used to convert a GIF file to an XPM file.
The STRING must contain a %s substring to be replaced by the
full path name of the GIF file.
The default is "giftopnm %s | ppmtoxpm".
- Tgif*InitExportPixelTrim: LEFT_NUMBER,TOP_NUMBER,RIGHT_NUMBER,BOTTOM_NUMBER
-
The numbers specify the number of pixels to trim when printing or exporting in
the XBM, XPM, or GIF format. The use of these values forms an escape
mechanism to fix an idiosyncrasy that tgif can not figure out exactly
how big the whole image is.
The default values are all 0's.
ENVIRONMENT VARIABLE
- TGIFPATH
-
This environment variable should be set such that the files, mentioned in the
FILES section below, can be found.
- TGIFICON
-
This environment variable should be set to the name of the object
file to be displayed when tgif is iconified. By default, it is
set to ``tgificon''.
If it starts with a / character, absolute path is used; otherwise,
the icon file is assumed to be $TGIFPATH/$TGIFICON.
- TGIF_[Domain]
-
Obsoleted.
FILES
$TGIFPATH/tgificon.obj contains the default tgif icon.
$TGIFPATH/keys.obj contains a summary of the non-alphanumeric key
bindings.
PROLOG/C TESTDRIVE
In the tgif distribution, there are three Prolog files which illustrate
a simple Prolog driver. tgif.pl contains predicates for parsing
tgif files (both .obj and .sym). frontend.pl contains predicates
for talking to Prolog engines, such as that of Quintus and SISCtus,
through the foreign function interface. To use frontend.pl,
frontend11.o needs to be built (which requires the
frontend11.o entry to be uncommented from the makefiles).
Finally, testdrive.pl contains a program which will print
out the ID files of all objects in the current drawing, if tgif
is escaped with the Solve() (or #s) command. This is also
a good way of finding out the structure of a tgif file (especially
because the structure is not documented due to the complexity
introduced to keep tgif compatible with files created by older versions).
A very simple C driver, testdrive.c, is also provided with
the tgif distribution which
perform the same function as the Prolog driver. The extra code present
in this file (and not present in tgif.c) is used to illustrate how
the in-memory objects and attributes can be traversed.
SEE ALSO
latex(1L), lpr(1), env(1), X(1),
dvips(1), csh(1), pbmplus(1), bitmap(1), XPM(1),
xfontsel(1), xlsfonts(1), xgrabsc(1), xloadimage(1),
xsnap(1), sxpm(1), xv(1), pstoepsi(1),
Mosaic(1), rand(3C)
IDIOSYNCRASIES
When any of the ``escape to driver'' commands are (accidentally)
executed, the current content of the drawing is saved into
``tmpmodel.obj'' if the drawing indicates that it is a .obj file;
then tgif escapes to the driver and returns right away.
If the drawing indicates that it is a .sym file, then the content
is saved into ``tmpmodel.sym'', but tgif does not return to the driver.
The paste operation works on a cut buffer generated by tgif or by non-tgif
tools (such as xterm).
If the cut buffer is not generated by tgif, its content is treated as
a collection of
ASCII character strings, which is inserted into the current drawing
as a text object (current settings for text objects are used
to create the text object).
If the cut buffer is generated by tgif, then all the current
settings are ignored.
The font sizes are the screen font sizes (which correspond to
the X fonts that are used to draw the text on the screen).
They appear smaller on the printout.
When a 24 point text is printed, it would correspond to about a 13.5 point
PostScript text. This is because tgif treats 128 pixels as an inch, and
PostScript treats 72 points as an inch.
Because characters supported by X11 and PostScript are different,
not all the characters, especially in the range 128 to 255 (or \200 to \377),
which are supported by X11, but are not accepted
by tgif. Furthermore, in order to print the supported subset
or these characters, character codes must be re-encoded.
Therefore, if one would like to hack tgif to support other personalized fonts,
one should be careful about the re-encoding mechanism.
The grids are not absolute; they are specified as screen
pixels, and they scale with the current zoom. For example,
if the grid is set at 16 pixels at maximum zoom, and if the
user zooms out once, objects can be drawn, moved, or stretched
at 16 screen pixel increments, but this corresponds to 32 pixels in the real
coordinate system.
If the vertical text spacing is set to negative values, highlighted
text will look a little strange due to XOR operations.
If the vertical text spacing is set to be greater than 100 or less
than -100, the panel window will not be cleared properly; to clear
the panel window, the user may have to close the tgif window and then
open it again.
As described in the TGIF SUBWINDOWS section,
in constrained move mode, if both endpoints of a not-selected polyline
lie inside the object being moved, then the whole polyline is moved.
This may look strange sometimes because,
for example, if one starts with a line segment pointing to an object,
just moving the object will caused the line segment to be ``stretched'';
however, if one eventually moves the object so that the other endpoint
is also inside the object, any future movement of the object will cause
the whole line segment to move (instead of just moving the original
endpoint). The moving of the vertex which is the neighbor of
a moved endpoint may also look strange at times.
At this point, one should switch to the unconstrained move mode.
Another idiosyncrasy with respect to the
constrained move is that right after duplicating
an object, the constrained move is disabled temporarily because it is
assumed that at this point the user would want to move the
new object to a desirable position, and only after this new object is
``settled down'', the constrained move will be re-enabled. Settling
down is signified by doing something other than moving the new
object.
Locked objects can be deleted.
Under the Edit Menu, PasteFromFile() reads a file into the drawing.
Pasting from a file is different from the normal pasting operation
where copying is performed in something like xterm because tabs are
automatically converted to spaces. Tabs are ignored when pasting from a file.
When printing a multipage drawing, all pages (even the ones that contains
no objects) will be printed. Using the PrintOnePage() command under the
Page Menu one can print the selected page (in stacked page layout mode,
this is the current page; in tiled page layout mode, the user is
prompted to select a visible page).
Since tgif is using its own icon window, it may confuse certain
window managers. If the effect is undesirable, one can set both the
Tgif*NoTgifIcon and the Tgif*UseWMIconPixmap X defaults to true.
BUGS
There seems to be a problem with printing Courier fonts with
a non-solid pen on the Apple LaserWriter. (Printing single
character does seem to work fine.)
As pointed out by the PostScript reference
manual, Courier is a ``stroked font'', and it is usually ``difficult'' to
construct character paths for such types of fonts.
However, Courier fonts work fine with ghostscript and dxpsview.
It's not clear how this problem can be fixed. The author
recommends avoiding Courier fonts when printing in color
if a non-solid pen is desired.
Arcs with arrow tips don't look very sharp (the tip is not pointed
as in open-splines with arrow tips).
At high magnifications, stretching arcs may cause anomalous
behavior due to round off errors.
Copying/pasting large objects might not work because tgif does
not use the ``selection'' mechanism (yet).
If and when tgif crashes, it will try to save the
current content of the drawing in a file called
``EmergencySave.obj'' (or ``EmergencySave.sym'' if the current
drawing specifies a symbol object).
Often, the drawing can be restored by loading the ``EmergencySave.obj'' file.
Nevertheless, if the cause of
the crash is that some objects are corrupted (due to programming
bugs), then the ``EmergencySave.obj'' file may also be corrupted.
When launching an application, if the command does not end with the '&'
character and the command does not terminate, tgif also hangs. In this
case, kill(1) should be used to send HUP signal to the tgif process if
one wants to save the content of tgif in ``EmergencySave.obj''.
The file exec.c may not compile properly on AIX machines. You might
have to add -D_BSD to the DEFINES in either the Imakefile or Makefile.noimake.
COPYRIGHT
Please see the ``Copyright'' file for details on the copyrights.
PostScript is a trademark of Adobe Systems Incorporated.
STATUS
The current status of tgif can be obtained from tgif's
World-Wide-Web home page at <URL:http://bourbon.cs.ucla.edu:8001/tgif/>.
AUTHOR
William Chia-Wei Cheng (william@cs.UCLA.edu)
<URL:http://bourbon.cs.ucla.edu:8001/william/>
Index
- NAME
-
- SYNOPSIS
-
- DESCRIPTION
-
- BASIC FUNCTIONALITIES
-
- GRAPHICAL OBJECTS
-
- TGIF SUBWINDOWS
-
- NON-ALPHANUMERIC KEY BINDINGS
-
- SHORTCUTS
-
- OBJECT NAMES
-
- ATTRIBUTES
-
- TELEPORT
-
- HYPERSPACE
-
- LAUNCH APPLICATIONS
-
- INTERNAL COMMANDS
-
- ARITHMETIC EXPRESSIONS
-
- GENERATING NCSA IMAGEMAP AND CERN CLICKABLE IMAGE FILES
-
- GENERATING EPSI FILE FOR SOME MICROSOFT WINDOWS APPLICATIONS
-
- LOCKING OBJECTS
-
- UNDO/REDO
-
- DOMAINS
-
- SELECTING A NAME FROM A POPUP WINDOW
-
- IMPORTING EPS FILES
-
- ADDITIONAL FONTS
-
- MULTIPAGE DRAWING
-
- SPECIAL ATTRIBUTES
-
- EXPORT TO TABLE
-
- MERGE WITH TABLE
-
- MIME TYPES AND MAILCAPS
-
- HOW TO MAKE A BUILDING-BLOCK OBJECT (SYMBOL FILE)
-
- X11 PIXMAP (XPM) FORMATS
-
- LATEX FIGURE FORMATS
-
- X DEFAULTS
-
- ENVIRONMENT VARIABLE
-
- FILES
-
- PROLOG/C TESTDRIVE
-
- SEE ALSO
-
- IDIOSYNCRASIES
-
- BUGS
-
- COPYRIGHT
-
- STATUS
-
- AUTHOR
-
This document was created by
man2html,
using the manual pages.
Time: 15:51:37 GMT, August 24, 2022